이것은 매우 쉽게 numpy
indexing by mask입니다.
여기에는 여러 가지 방법이 있습니다. 예를 들어 두 개의 플로트 이미지가 있습니다. 그런 다음 부울 마스크를 만듭니다 (이 경우 무작위 부동 이미지를 찍은 다음 약 절반의 픽셀이 포함되며 절반은 제외됩니다).
>>> import numpy as np
>>> img1 = np.random.rand(100,100,3)
>>> img2 = np.random.rand(100,100,3)
>>> mask = np.random.rand(100,100)>.5
>>> comb_img = img2.copy()
>>> comb_img[mask] = img1[mask]
그래서
mask
는 모든 점에서 분명하기 : 그런 결합 된 이미지에는 마스크
True
당신이 다른 이미지의 값을 삽입 할 위치에 관계없이 다음 동일 이미지 중 하나에 설정하고 있습니다
True
인 경우이
comb_img
은
img1
의 값을 가지며 그렇지 않은 경우 값은
img2
입니다.
더 명확한 두 이미지를 결합 할 수있는 또 다른 방법은 결합 된 이미지를 먼저 빈 이미지로 만든 다음 마스크 지점에 하나의 이미지를 삽입하고 반전 된 마스크 지점에 다른 이미지를 삽입하는 것입니다. 부울 numpy
배열 ~
에 대한
>>> comb_img = np.zeros_like(img1)
>>> comb_img[mask] = img1[mask]
>>> comb_img[~mask] = img2[~mask]
그리고 넣다 당신이 그것을 보지 못했다는, 그것을 반전 : 물론
>>> ~np.array([True, False, True])
array([False, True, False], dtype=bool)
마스크는 숫자 일 수 있고, 당신은 그냥 사용할 수 있습니다 mask==0
및 mask>0
을 사용하여 인덱싱을위한 논리 배열을 만듭니다.
'Mat :: copyTo' 메서드를 사용하십시오. 그러나 두 이미지가 동일한 크기 여야하거나 ROI 마법을 써야합니다. – zindarod
아마도이 질문을 확인하십시오. https://stackoverflow.com/questions/41572887/equivalent-of-copyto-in-python-opencv-bindings – zeFrenchy