2017-04-20 5 views
2

C++ 용 도움말 OpenCV 라이브러리로 인식 문제를 해결하려고합니다.이미지의 등고선 검색

는 내가 텍스트 (아래)이 있고 난 cvFindContours(...) 기능으로 사용이 텍스트에서 각 기호를 구분합니다. 이후, 나는 그것을 인식하기 위해 각각의 분리 된 심볼을 신경망의 입력에 보내고 싶다. 괜찮아. 내 이미지에서 모든 윤곽을 얻을 수 있으며 도움이 cvDrawContours(...) 기능 (아래)을 사용하여 이미지에 그릴 수 있습니다. 그러나 cvFindContours(...)은 발견 된 모든 윤곽을 포함하는 정렬되지 않은 시퀀스 (이 시퀀스에서 첫 번째 윤곽의 포인터)를 반환합니다. 내 작업 순서는 매우 중요합니다.

CVAPI(int) cvFindContours(CvArr* image, CvMemStorage* storage, CvSeq** first_contour, 
          int header_size CV_DEFAULT(sizeof(CvContour)), 
          int mode CV_DEFAULT(CV_RETR_LIST), 
          int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE), 
          CvPoint offset CV_DEFAULT(cvPoint(0,0))); 

-image - 소스 이미지

-storage - 저장 포함 등고선

-first_contour - 스토리지의 제 형상 포인터

-mode - 검색 모드 (I 사용하는 CV_RETR_EXTERNAL 검색을위한 외부 윤곽)

-method - 근사 방법

Source image

Source image with drawn a bound rectangles

가 어떻게 순서대로 윤곽을 반환 cvFindContours(...) 기능을 할 수 있습니다 (I 기본적으로 CV_CHAIN_APPROX_SIMPLE을 사용하고 있습니다) 그림에서 그들이에서? 가능한가?

감사합니다. 당신은 직접 특정 순서 (I 함수 호출에서 조정이 아무런 매개 변수가없는 의미)에서 윤곽을 산출하기 위해 findContours을 강요 할 수

답변

1

.

윤곽선을 "텍스트 읽기"로 정렬하려면 모든 윤곽선을 통과하는 루프를 수행하고 각 윤곽선에 대해 가장 왼쪽 상단에있는 각 contour 객체의 모든 점을 직접 통과하거나, 경계 상자 (예 : minAreaRect 참조)를 사용합니다.
이 모든 포인트가되면, (일부 조정이 아마 같은 텍스트 행의 모든 ​​부분으로 높이의 범위 내에서 시작하는 모든 윤곽선을 검출처럼 만들 수있을 것이다)

가기 오른쪽 하단 왼쪽에서으로 정렬
+0

을 제공 할 수 있습니다. 매우 간단합니다. 나는 패배자이다. D. 감사합니다. @ 솔티 우스 – rekrut

1

이미지에있는 모든 윤곽선에 대해 경계 사각형을 발견했습니다. 대신 에 대해가는 가장 왼쪽 점 접근을, 당신은 당신의 접근 방식은 텍스트되고 있기 때문에보다 강력한 각 윤곽의 중심,에 따라 윤곽을 정렬 할 수 있습니다. OpenCV의 커뮤니티

THIS ANSWER

는 시작 나는 당신이 무슨 말을하는지 이해 생각

+0

답변 해 주셔서 감사합니다! 에서보세요 @rekrut – rekrut

+0

[이] (http://answers.opencv.org/question/99255/how-to-sort-contours-left-to-right-while-going-top-to-bottom/) 게다가 –