簡體   English   中英

png 文件的 Numpy 數組在 matplotlib.pyplot 中旋轉

[英]Numpy array of a png file is rotated in matplotlib.pyplot

我試圖在 matplotlib.pyplot 中分散這個漸變圖像的所有白色像素:

import numpy as np
from PIL import Image
import cv2
from matplotlib import pyplot

img = Image.open(
    "/root/.../aec.png").convert("L")

img = np.array(img)

kernel = np.ones((2, 2), np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

ox, oy = np.where(gradient == 255)

pyplot.plot(ox, oy, ".k")
pyplot.show()

原始圖片 (...) 的分辨率為 2123x1269,如下所示:

我在 pyplot 中的圖表顯示我的漸變圖片順時針旋轉 270°,我不明白為什么。

我嘗試pyplot.plot(oy, ox, ".k") ,然后與原始圖像相比,它被翻轉到 x 軸。 使用gradient = cv2.rotate(gradient, cv2.cv2.ROTATE_90_CLOCKWISE)旋轉原始圖像會得到與原始圖像的像素坐標不同的坐標。 xy 像素坐標必須是漸變圖像的坐標。 )此外,應保持 2123x1269 的分辨率,並且程序應盡可能快地運行。

如何正確顯示 matplotlib.pyplot 中漸變圖像的像素坐標?

這是因為 opencv 的原點位於左上角。 嘗試在 pyplot 上恢復 y 軸並交換 x 和 y。

編輯:只需使用 plt.imshow(),它是正確的 function 來顯示圖像數據。

對於遇到此問題的任何人,這是我的最終代碼:

import numpy as np
from PIL import Image
import cv2
from matplotlib import pyplot

img = Image.open(
    "/root/.../aec.png").convert("L")

img = np.array(img)

kernel = np.ones((2, 2), np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

ox, oy = np.where(gradient == 255)

pyplot.plot(oy, ox, ".k")
pyplot.imshow(gradient)
pyplot.show()

plot 的放大版本:正確的 plot ,直到現在它服務於我的目的。

謝謝@frab

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM