2016-07-12 3 views
1

기본적으로 모든 픽셀을 반복하고 범위를 지정하면 RGB 값을 흰색으로, 그렇지 않으면 검정으로 변경합니다.범위 내라면 모든 픽셀을 반복하고 픽셀을 검정색으로 변경하고 그렇지 않으면 흰색으로 변경하십시오.

마스크를 사용하는 몇 가지 예제를 보았습니다.하지만 마스크를 사용하여 RGB 값을 비교하는 방법에 대해 혼란 스럽습니다. 내 범위는 그래서 일단 난에 YCrCb에, 내 이미지, IMG가 같은

min_YCrCb = np.array([0,133,77],np.uint8) 
max_YCrCb = np.array([255,173,127],np.uint8) 

같습니다. RGB가 범위 내에 있는지 알 수있는 마스크를 어떻게 만들 수 있습니까? 일단 완료되면 흑백으로 설정하는 방법은 무엇입니까?

+0

흑색은 0,0,0이다. 흰색은 255,255,255입니다. 범위가 전부이므로 R을 확인할 필요가 없습니다. 원하는 두 극단으로 G와 B를 확인하십시오 –

+0

하지만 G와 B를 어떻게 확인합니까? 나는 일반적으로 픽셀의 RGB에 접근하는 방법을 알아낼 수 없다. – lambda

+0

'마스크'에 대해서는 잘 모르지만 132

답변

1

나는 inRange 방법이 필요하다고 생각합니다.

따라서, 귀하의 예제에서 당신은 사용할 수 있습니다 : 그 값이 지정된 범위에있는 경우

# Keep in mind that OpenCV stores things in BGR order, not RGB 
lowerBound = cv.Scalar(0, 133, 770) 
upperBound = cv.Scalar(255, 173, 127) 

# this gives you the mask for those in the ranges you specified 
cv.InRange(cv_input, lowerBound, upperBound, cv_output); 

당신의 cv_input의 각 픽셀 들어, 그렇지 않으면 0, 255 (모두 1)로 설정됩니다. 반대의 경우에는 Not 메서드를 사용할 수 있습니다.

# This will set all bits in cv_input 
cv.Not(cv_output, cv_inverse) 
관련 문제