2011-10-16 6 views
5

안드로이드 폰으로 사진을 찍은 후 예를 들어 사진 속의 물건을 클릭하여 식별하고 싶습니다. 대부분의 경우에 가능한 제품 :
1. 눈금자
2. 사람
3. 연필
나는 안드로이드 사전 구축 - OpenCV의 버전 2.3.1을 사용하고 내가 눈금자 개체로 클릭하고 그것을 표시하는 플러드 필을 시도, 윤곽선이 닫히지 않으면 전체 그림이 채워집니다.
a) 나는 눈금자 객체를 클릭하여 남쪽, 북쪽, 동쪽, 서쪽으로 이동하여 가장자리가있는 곳을 찾고 이러한 좌표를 수집하려고했지만 무거운 문제가 발생했습니다 (묻지 않음).object detection android opencv

질문 :
1. 원하는 개체를 채우기 위해 윤곽선을 어떻게 든 닫을 수 있습니까?
2. 필자가 실제로 찾고자하는 것은 바닥의 좌표와 눈금자 (예 :)의 높이입니다.
다른 해결책은 인정됩니다. 당신은 어떻게 그것을 깨달았습니까?

업데이트 : 문제를 a)로 수정하고 현재이 방법을 사용합니다 (이에 대해 만족하지 않습니다). Entreco의 접근 방식을 시도했지만 지금은 원하는 솔루션을 제공하지 않는 것 같습니다.

답변

6

이 방법을 사용했는지는 알 수 없지만 일반적으로 이미지를 먼저 처리하면 더 나은 결과를 얻을 수 있습니다.

1) 노이즈

2) AdaptiveThreshold 적용을 제거 GuassianBlur 적용 -> 사용하여 크랙

채우기 위해, Dilate 적용

3) 흑백 동작 이미지를 변환하는 방법 AdaptiveThreshold 및 Dilate 작업에 대한 다른 설정을 사용하면 닫힌 윤곽을 얻을 수 있습니다.

예 :

// 1) Apply gaussian blur to remove noise 
Imgproc.GaussianBlur(mGraySubmat, mIntermediateMat, new Size(11,11), 0); 

// 2) AdaptiveThreshold -> classify as either black or white 
Imgproc.adaptiveThreshold(mIntermediateMat, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 2); 

// 3) Invert the image -> so most of the image is black 
Core.bitwise_not(mIntermediateMat, mIntermediateMat); 

// 4) Dilate -> fill the image using the MORPH_DILATE 
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1)); 
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel); 
+0

@Entreco에 감사드립니다. 나는 이것을 시도하고보고 할 것이다. – gartenabfall

+0

@Entreco는 닫힌 윤곽선을 사각형으로 그릴 수 있습니다. –

+0

검은 색 사각형 객체 인 경우 가장자리를 감지하지 못합니다. –