我是一個圖像處理新手。使用opencv,如何刪除透明圖像中的非對象?
我試圖調整矩形/框架的大小,將我的對象綁定在透明圖像中。
但我不知道如何做到這一點。
請幫幫我。
非常感謝。 P/s:與作物不重複。在作物中,你已經修復了一個元組(Crop,from x,y,w,h)。但在我看來,我不知道該在哪裏收割。我們需要首先檢測包含我的對象(太陽眼鏡)的最小矩形,然後裁剪。
我是一個圖像處理新手。使用opencv,如何刪除透明圖像中的非對象?
我試圖調整矩形/框架的大小,將我的對象綁定在透明圖像中。
但我不知道如何做到這一點。
請幫幫我。
非常感謝。 P/s:與作物不重複。在作物中,你已經修復了一個元組(Crop,from x,y,w,h)。但在我看來,我不知道該在哪裏收割。我們需要首先檢測包含我的對象(太陽眼鏡)的最小矩形,然後裁剪。
首先,你必須加載具有阿爾法支持在圖像中的OpenCV
import cv2
import numpy as np #needed in the second step
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
通知的cv2.IMREAD_UNCHANGED
,這等於-1。這將加載圖像與BGRA
然後將找到的對象的邊界矩形格式
# axis 0 is the row(y) and axis(x) 1 is the column
y,x = im[:,:,3].nonzero() # get the nonzero alpha coordinates
minx = np.min(x)
miny = np.min(y)
maxx = np.max(x)
maxy = np.max(y)
然後你裁剪
cropImg = im[miny:maxy, minx:maxx]
最後,你表現對象,並保存結果到磁盤
cv2.imwrite("cropped.png", cropImg)
cv2.imshow("cropped", cropImg)
cv2.waitKey(0)
我沒有時間測試此代碼,所以我可能有一個錯字。我希望它能幫助你。任何問題,只是評論這個答案
這裏是一個小更新,刪除多餘的白色部分:
首先取得布林面具它是白色的
whiteCellsMask = np.logical_and(cropImg[:,:,0] == 255, np.logical_and(cropImg[:,:,1] == 255, cropImg[:,:,2]== 255))
然後更改掩碼值的阿爾法爲0
cropImg[whiteCellsMask,:] = [255, 255, 255, 0]
這將改變所有像素都是白色(255,255,255)透明(alpha = 0)。
此代碼不是裁剪輪廓對象,請參閱我的照片https://i.stack.imgur.com/Xy9VB.png。請刪除這張圖片的一些白色噪音邊界。它看起來非常糟糕,當我插入這張照片到另一個 –
@JameH那麼,你的問題是調整圖像的大小以適應邊界,但是......這是可能的,因爲你想刪除的額外部分是白色的,看看我的更新代碼.. – api55
[如何使用Python在OpenCV中裁剪圖像](https://stackoverflow.com/questions/15589517/how-to-crop-an-image-in-opencv-using-python) – api55
In可能重複的一個,你有2個版本,PIL和OpenCV。唯一可能的區別是透明部分,至少在加載OpenCV時必須將-1放入標誌部分。 – api55
@ api55否與作物重複。裁剪你已經修復了一個元組(Crop,from x,y,w,h)。但在我看來,我不知道該在哪裏收割。我們需要檢測包含我的對象的最小矩形(太陽眼鏡) –