2013-10-13 34 views
1

我正在使用opencv和numpy進行圖像處理。操作數無法與形狀一起播放(780,1080)(780,1080,3)

我對圖像進行閾值處理,然後對其進行一些處理,然後用原始圖像對其進行掩蓋。

我做閾這樣的(步驟1):

ret,thresh1 = cv2.threshold(gray,210,255,cv2.THRESH_TOZERO) 

然後我分配thresh1img(步驟2):

img = thresh1 

和我掩蔽像這樣(步驟3):

final = img&cv2.cvtColor(less, cv2.COLOR_GRAY2BGR) 

但是,有了這個,我在step3上得到以下錯誤:

operands could not be broadcast together with shapes (780,1080) (780,1080,3) 

如果我更換第二步:

cv2.imwrite("2.png", thresh1) 
    img = cv2.imread("2.png") 

然後一切工作正常。我無法理解實際存儲的差異,然後從磁盤讀取相同的圖像,而只是將img設置爲thresh1

有沒有辦法可以避免從磁盤寫入和讀取圖像?

回答

1

至於爲什麼文件寫入/讀取使得它的工作,img/thresh是一個單通道圖像。當你將它寫入png格式時,它將被轉換爲RGB(或更確切地說BGR)。因此,當您重新加載它時,它現在是一個BGR圖像,它與您轉換的less圖像的形狀相匹配。嗯,就像berak說的那樣,在轉換爲RGB之前,你可能會用img&less

或者:

img = cv2.cvtColor(thresh1, cv2.COLOR_GRAY2BGR) 

和你的代碼的其餘部分應工作。

+0

感謝您的解釋。另一種方法是阻力最小的路徑:) – Anthony

0

&的兩個操作數都需要相同數量的通道。你可能想跳過cv2.cvtColor()和使用img & less直接

+0

刪除'cv2.cvtColor'上少修復這個問題,但進一步混淆了我在'最後'執行的處理 – Anthony

相關問題