[英]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.