2017-12-17 25 views
0

이미지가 있습니다. img. 또한 img의 픽셀 값을 유지하려는 모든 장소에서 값 255가있는 마스크가 다른 모든 위치에서 0입니다.OpenCV python에서 바이너리 마스크를 올바르게 설정하는 방법은 무엇입니까?

저는이 두 가지 이미지를 사용하고 싶습니다. 마스크와 img는 마스크가 255 인 모든 위치에서 원래의 img 값을 갖는 행렬을 만들고 마스크가 0 인 모든 위치에서 -1 값을 만듭니다.

그래서 여기까지 작성했습니다 :

maskedImg = cv2.bitwise_and(img, mask) 

그러나 maskedImg는 마스크가 0 인 모든 위치에서 0을가집니다. 빠른 비트 연산을 사용하여 다른 모든 위치에서 0 대신 값 -1을 얻으려면 어떻게해야합니까?

+1

스왑 주석에 대한 이미지 –

+0

@MadPhysicist 덕분와 주변 마스크 (비트되지 않음) 비트 또는. 마스크와 마스크를 이미지로 바꾸면 마스크 외부의 모든 값 255를 갖게됩니다. 마스크 밖의 다른 모든 장소에서 -1 값을 원합니다. –

+2

왜 -1을 선호하는지 모르겠지만 OpenCV는 대개 마스크를 포함한 대부분의 이미지에 대해 uint8을 사용하므로 아마도 프리스트 타입을 바꿔야 할 것입니다. -1을 가질 수 있으려면 – api55

답변

2

이미지의 dtype이 무엇인지 알 수 없습니다. 기본값은 np.uint8이므로 결과에 -1을 설정할 수 없으므로 -1 + 256 = 255으로 언더 플로합니다. 즉, dtype이 np.uint8 인 경우 음수 값으로 설정할 수 없습니다.

-1로 설정하려면 dtype을 변경해야합니다.

#masked = cv2.bitwise_and(img, mask).astype(np.int32) 
masked = np.int32(img) 
masked[mask==0] = -1