2012-07-04 7 views
4

현재 윤곽선 경계 내에있는 모든 검은 색 픽셀을 검색하려고합니다. 저는 윤곽선 경계선에 관심이 없지만 경계선 안에있는 실제 픽셀을 구성하는 검정색 픽셀에 관심이 있습니다. 이미지의 실제 좌표를 얻을 수 있다면 좋을 것입니다.OpenCV 윤곽선 경계 내에서 검은 색 픽셀을 얻습니다.

마스크를 사용하여 copyTo 메소드를 사용해 보았습니다.하지만 올바른 매개 변수를 설정하지 않았다고 생각합니다. 한편, 전체 윤곽 영역을 명령에 지정된 색으로 채우는 Core.fillPoly를 사용하여 시도했지만 픽셀 정보를 얻는 것은 도움이되지 않습니다. 아무도 나를 여기로 안내 할 수 없었나요? 나는 OpenCV 2.3.1로 안드로이드 2.2에서 일하고있다.

답변

4

등고선 경계 내에있는 일련의 픽셀이 있습니다. 검정색 픽셀 집합이 또 있습니다. 이 두 세트의 교차점, 즉 경계 내에 있고 색상이 검정 인 픽셀 세트를 찾고자합니다.

내가하고자 이렇게하려면 다음을 수행
  1. 는 마스크가되도록 검은 색에 흰색 채우기 모양, (자신의 이미지)로 윤곽을 그립니다. cv::drawContours 또는 cv::fillPoly을 사용할 수 있습니다.

  2. 이미지의 검은 픽셀을 다른 마스크로 필터링합니다. cv::thresholdTHRESH_BINARY_INV이고 임계 값은 0입니다.

  3. 에만 기준을 충족시키는 화소에 비 - 제로 값을 사용하여 이미지와 동일한 크기의 행렬을 bitwise_and 또는 matResult = mat1 & mat2;

결과처럼 단순히 & 연산자이다하여 교차 세트를 찾기 윤곽선 안에 있고 검은 색은 이미지 안에있다. 이 행렬을 반복하고 0이 아닌 값을 테스트하여 개별 좌표를 얻을 수 있습니다.

+0

감사합니다. Brian, 유망 해 보입니다. 나는 그것을 밖으로 시도하고 알려드립니다. –

+0

안녕하세요. Brain,이 코드는 제가 구현 한 코드 중 하나입니다. 현재 안드로이드 에뮬레이터에서 테스트 한 것 같습니다. 그러나 마지막 행렬을 벡터 집합으로 변환하려고하면 응용 프로그램이 충돌합니다. 저는 매트가 가지고있는 0이 아닌 픽셀을 볼 수 있도록 변환 중입니다. 제발 조언. 이 줄에서 실패합니다 - Converters.Mat_to_vector_Point (finalResult, points);'이 명령으로 최종 매트를 얻었습니다 - Core.bitwise_and (mGrayC4, contourRegion, finalResult); –

+0

'points' 명부? 중간 행렬을 검사하여 예상 한 내용을 유지하는지 확인할 수 있습니다. 그렇지 않으면 코드를 더 이상 보지 않아도 문제가 무엇인지 알 수 없습니다. –