둘 다 마스크/이진 이미지를 만들고 논리 AND를 사용하는 것이 어떻습니까?
각 이미지 (이미지 콘텐츠는 모두 1)의 회색 값 복사본을 각각 대상의 새로운 사본 (0으로 초기화 됨)으로 변환 할 수도 있습니다.
그런 다음 모든 대상 이미지를 추가합니다. 0
이있는 영역은 덮개가 벗겨져 1
이고, 2 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) (a) =
오버랩 (c) +
SRC1
바란다.
대단히 감사합니다. 나는이 개념을 이해하지만, 하나의 이미지 영역을 어떻게 규범화 하는가? 내 문제는 결과가 레이어/스티치 된 이미지는 여러 이미지가 아닌 단일 이미지입니다. –
죄송합니다. 규범은 잘못된 이름입니다. 모든 픽셀 값을 1로 설정하면 트릭을 수행해야합니다. 나는 지금 내 answert를 확장하고있다 .. – RuDevel
고마워.이 코드는 코드에서 하나의 작은 것을 제외하면 훌륭하게 작동한다. dst = np.zeros ((100,100), dtype = np.int)는 dst = np.zeros ((100,100), np.uint8) 여야합니다. 이 덕분에 정말 도움이되었습니다 –