2017-02-22 220 views
3

我正在使用OpenCV和python創建拼接程序,目前正在拼接圖像,現在正在嘗試將它們融合在一起。最終目標將是使用圖形切割來更好地縫合它們,但現在我只是基於他們找到的單應性重疊圖像。OpenCV確定相交/重疊區域

這是當前結果拼接兩張圖片時的照片。 enter image description here

我的目標是確定重疊區域並將其放入一個可應用於右上圖像(即圖層頂部的圖像)的遮罩中,以便我可以根據距離使用任何有混合opencv使用或其他算法。

這是我正在尋找什麼的視覺。 enter image description here

任何幫助表示讚賞。

回答

3

如何創建兩者的掩碼/二進制映像並使用邏輯AND?

您也可以將每個圖像的灰色值副本(圖像內容全部爲1)轉換爲每個目標的新副本(使用零初始化)。

然後您將所有這些目標圖像添加。 然後將發現0的區域,覆蓋12 to n將覆蓋2 to n圖像。

使用numpy的廣播工具時,這非常簡單高效。

import cv2 
import numpy as np 

#our target area (the black background) 
dst = np.zeros((100,100),dtype=np.int) 
src1 = dst.copy() 
src2 = dst.copy() 
src1[50:,50:] = 1 #fake of first translated image (row/col 50-end) 
src2[:70,:70] = 1 #fake of second translated image (row/col 0-70) 

overlap = src1+src2 #sum of both *element-wise* 

cv2.imwrite('a.png', src1*255) #opencv likes it's grey images span from 0-255 
cv2.imwrite('b.png', src2*255) #... 
cv2.imwrite('c.png', overlap*127) #here vals 0-2, *127 gives (almost) 255 again 

np.where(overlap==2) #gives you a mask with all pixels that have value 2 

SRC2(b)中 enter image description here + SRC1的(a) enter image description here =重疊(c)中 enter image description here

希望有所幫助。

+0

感謝隊友,這很有道理。我理解這個概念,但是如何規範一個圖像區域?我的問題是結果分層/拼接圖像是一個單一的圖像,而不是多層圖像。 –

+0

對不起,規範是這裏的錯誤名稱 - 只是將所有像素值設置爲1也應該這樣做。我正在擴大我的答案現在.. – RuDevel

+0

感謝隊友這個工程很好,除了你的代碼中的一件小事。 dst = np.zeros((100,100),dtype = np.int)應該是dst = np.zeros((100,100),np.uint8)。這真的有幫助,謝謝 –