[OpenCV 3.2] Detect Rectangle - 1 (사각형 검출)

OpenCV의 findContours와 approxPolyDP함수를 이용하여 사각형을 검출한다.


1. 사각형을 검출할 이미지를 생성한다.


2. 사각형을 검출할 이미지를 Canny함수로 에지 이미지로 변환한다.

1) 소스 코드

2) 실행 결과


3. 에지 이미지를 morphologyEx 함수로 형태를 뭉갠다.

1) 소스 코드

2) 실행 결과


4. Morph 이미지를 contours함수를 이용하여 도형들을 그룹화 한 후 그려준다.

1) 소스 코드

디버그 모드로 findContours 함수 사용에서 에러가 발생했는데 릴리즈 모드로 바꿔서 빌드하니 해결이 되었다.

2) 실행 결과


5. contours 이미지를 approxPolyDP를 이용하여 선분을 간략화한 후에 4개의 꼭지점을 갖는 도형을 검출한다.

1) 소스 코드

처음에 convexHull을 사용해 봤는데, convexHull는 십자가나 별표 모양의 안쪽으로 굽어진 도형들이 있는 경우에 내부 점들을 무시하기 때문에 다각형 검출에 적절하지 못하다.

2-1) appoxPolyDP의 실행 결과

2-2) 4개의 꼭지점의 도형만 검출 결과


6. 사각형 검출 최종 순서도


다음은 주어진 이미지와 비슷한 이미지를 검출하는 것에 대해 정리한다.




컴퓨터 비전과 영상 처리에 대해 독학을 하면서 정리한 걸 적고 있습니다.

전공과 무관하며 전문적인 지식이 아니므로 개인적인 의견과 부족하고 틀린 점이 많습니다.

추가 지식 및 잘못된 점을 지적해주시면 공부하는데 많은 도움이 되겠습니다. 감사합니다^^

- 푸어맨


[Reference]

(Detect rectagle from corners) http://stackoverflow.com/questions/34377943/opencv-is-it-possible-to-detect-rectangle-from-corners

(Ramer–Douglas–Peucker algorithm) https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

(contours2.cpp) https://github.com/opencv/opencv/blob/master/samples/cpp/contours2.cpp

(형태학 필터)  http://hongkwan.blogspot.kr/2013/01/opencv-5-2-example.html

(approxPolyDP) http://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html

(외곽선 찾기) http://hns17.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-ConvexHull-Grahams-Scan

+ Recent posts