2017-10-24 2 views
0

컬러 이미지에 컬러 마스크를 적용하려고합니다. 컬러 마스크는 컬러 이미지에 적용하려는 윤곽입니다. 마스크는 핑크색 외곽선을 제외하고 모두 검은 색입니다 (BGR = [180, 105,255]). 이상하게도 다음 방법을 사용하여 시크 색 [227,230,49] 윤곽을 적용 할 수 있습니다.OpenCV - 컬러 이미지에 컬러 마스크 적용

컬러 이미지를 imgColor, 시안 색 윤곽선을 maskCyan이라고 합니다. 다시 말하지만,이 마스크는 외곽선의 일부인 픽셀을 제외하고는 모두 검은 색으로 [0,0,0]입니다 ([227,230,49]). 그런 다음 imgColor_with_cyan_outline = cv2.bitwise_or(imgColor, maskCyan)을 수행하여 이미지 위에 적용 할 수 있습니다. 이 작업을 maskPink으로 수행하면 시안 대신 분홍색 픽셀이 표시되고 imgColor_with_pink_outline = cv2.bitwise_or(imgColor, maskPink)을 사용하면 마스크 나 윤곽선이 적용되지 않은 원래 이미지가 반환됩니다. 나는 단지 내가 얼마나 오해하고있는 것 같아요 cv2.bitwise_or() 작품,하지만 나는 잘 모르겠습니다.

컬러 이미지에 컬러 마스크를 적용하는 다른 방법이 있습니까?

+1

가능한 복제를 읽을 수 있습니다 자세한 내용은 귀하의 OpenCV의 버전

Pink=cv2.inrange(pink baundary) Black=cv2.inrange(black baundary) Mask= Pink+Black 

에 따라 구문 확인 (https://stackoverflow.com/questions/22255368/copying-values-from-one-numpy-matrix-to-another-dependent-on-boolean-mask) –

+1

bitwise 또는 -> 각 비트를 취하고 다른 이미지의 동일한 비트. 예를 들어 한 이미지의 픽셀 63과 255의 이미지가 255 인 경우 255가됩니다. 63과 72를 사용하면 127이됩니다 (63111111 adn 72는 01001000입니다). 마스크의 역함수를 이진 (흰색과 검은 색)으로하여 픽셀을 "제거"하거나 이미지에서 검정색으로 바꿀 수 있습니다. 그런 다음 시안 색 이미지를 추가하고 시안 색 이미지를 이미지에 넣거나 numpy를 @ DanMašek 링크로 대체하십시오 – api55

답변

2

비트 단위로 OR 연산의 속성을 잘못 이해했다고 생각합니다. cv2.bitwise_or은 두 개의 원본 이미지와 선택적 마스크를 사용합니다.

cv2.bitwise_or(src1, src2, dst, mask) 

그래서 src1 값 1 src2 갖는 화소를 갖는 경우 2 값을 가진 픽셀을 보유하고 src1 | src2은 :

8 비트 부호 숯불 얻어진 화소 값 3하게
0001 = src1 
0010 = src2 
0011 = src1 | src2 

이미지의 최대 결과 픽셀 값은 255입니다 (135 | 235는 255 임).

+0

그게 더 합리적입니다. 나는 그것이 0이 아니면 두 번째 값을 취할 것이라는 의미라고 생각했다. 그래서 만약 당신이'cv2.bitwise_or ([255,255,255], [0,0,0]) = [255,255,255]'와'cv2.bitwise_or ([255,255,255], [126,122,0]) = [126,122,0]'. 첫 번째 이미지의 픽셀을 두 번째 인수의 0이 아닌 픽셀로 대체하는 함수가 정말 필요합니다. – greenthumbtack

+0

@ greenthumbtack 원하는 것은 마스크를 기반으로 한 이미지를 다른 이미지로 복사하는 것입니다. 그 좋은 게시물을 참조하십시오 : https://stackoverflow.com/questions/41572887/equivalent-of-copyto-in-python-opencv-bindings – zindarod

0

필터링을위한 baundary가있는 경우 마스킹에 cv2.inrange 기능을 사용할 수 있습니다. 다음 코드를 값으로 수정하십시오. 당신이 [부울 마스크에 다른 의존 한 NumPy와 매트릭스에서 복사 값]의

https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html

+0

어떻게 사용합니까? 마스크에는 검은 색과 분홍색의 2 가지 색상 만 있습니다. 'inrange '는 마스크를 적용하지 않고 이미지에서 색상을 찾는 것이라고 생각했습니다. – greenthumbtack

+0

내 의견을 편집하십시오 내 대답을 다시 보시기 바랍니다. –

관련 문제