我有一張圖像,我想在某些特定座標上繪製(疊加)某些點。我用zorder
和plt.scatter
。刪除matplotlib圖像周圍的空間,使用重疊散點圖以保存原始大小
我想在原始大小保存所得到的圖像在Python numpy array variable
而不是脫機文件(位圖格式),因爲我想進一步處理,頂部的散點圖這個圖像,而無需重新閱讀它。
我的想法是,這將是更快的疊加後的圖像保存到numpy array variable
(在RGB圖像格式 - (height,width,channels)
)在Python,而不是使用plt.savefig
,然後用cv2.imread
再次重新讀取圖像,然後做必要的後續處理。
速度對我而言是一個重要因素。
我試圖設置軸界限,àxis.('off')
,fig.tight_layout(pad=0)
,`bbox_inches = 0 /「緊」,以擺脫在我的疊加後的圖像的任何結尾間隔,但是:
- 仍有如果使用
plt.savefig
在我的圖像拖尾灰色空間(IMG時顯示帶有
cv2.imshow
或cv2.imwrite
示出) - >在圖像周圍的空白出現轉換爲
numpy array
之後的疊加圖像它沒有 原始大小。
下面的代碼,建議歡迎。所有評論的事物都代表我嘗試過並且沒有工作。我已經離開了他們,所以人們不會再提出這些建議。
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('Lenna.png')
h, w ,ch = np.shape(img)
# some random coordinate points
x = [30,40, 45, 60]
y = [50,60, 65, 70]
fig = plt.figure()
# tried to set the axes, with these commands, didn't work
#ax = plt.axes([0,0,1,1])
#fig_axes = fig.add_subplot(111)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), zorder=0, extent=[0,w, h, 0], interpolation="nearest")
plt.scatter(x, y, zorder=1, facecolors='b', edgecolors='k', s=50)
# tried to limit the axes size based on the image --> didn't work
#plt.xlim(0,w)
#plt.ylim(0,h)
plt.axis('off')
# again didn't do anything
#fig.axes.get_xaxis().set_visible(False)
#fig.axes.get_yaxis().set_visible(False)
fig.tight_layout(pad=0)
fig.canvas.draw()
# save just for verification purpose that no space around the image is shown
plt.savefig("test_Lenna_scatter.png", bbox_inches=0)
# HERE I SAVE THE PLOTTED FIG IMAGE TO NUMPY ARRAY
data_img_array = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data_img_array = data_img_array.reshape(fig.canvas.get_width_height()[::-1] + (3,))
# HERE I DISPLAY THE NUMPY ARRAY IMAGE AFTER SCATTER
# ALSO PLOT ORIG IMG TO CHECK SIMILARITY
cv2.imwrite('Lenna_scatter.png', cv2.cvtColor(data_img, cv2.COLOR_BGR2RGB))
cv2.imshow('Lenna Scatter', cv2.cvtColor(data_img, cv2.COLOR_BGR2RGB))
cv2.imshow('orig', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
成績
疊加後的圖像與來自plt.savefig
獲得散點圖。出現一個我不想要的空白區域(如果你點擊圖片)。
圖片plt.scatter
後重建爲numpy array
。用cv2.imwrite
保存。注意灰色拖尾空間和不同的圖像大小。我不想要的。
「無效」不是一個足夠的問題描述。在你展示的代碼中,你不要試圖將任何東西保存爲numpy數組。所以目前還不清楚你想要做什麼。請清楚說明您使用的代碼,您得到的結果以及與您的期望有多大差異。請通過[編輯]你的問題來完成。 – ImportanceOfBeingErnest
'data_img'是一個numpy數組(dtype = np.uint8),它是RGB圖像。沒有任何工作 - >在此之前,我指定了我所嘗試的,我的意思是這些命令都沒有任何影響。 – Roxanne