2012-11-22 6 views
6

opencv (C++)을 처음 사용하고 있으며 라인 감지 기능을 구현하려고합니다.일반적으로 OpenCV 라인 감지

두 줄의 그림이 있는데 줄 사이의 거리를 확인하려고합니다. 나는 Hough, Canny 등이 있다는 것을 알고 있습니다. 그러나 선들 사이의 거리를 계산하기 위해 다른 선의 좌표를 어떻게 얻을 수 있습니까? opencv 등고선 기능을 사용해야합니까 아니면 더 좋은 방법이 있습니까? 완전한 코드 샘플이 필요하지 않지만 누구든지 작업을 완료하는 가장 좋은 방법을 말할 수 있습니까?

+0

게시물에 서명을 추가 할 필요가 없습니다. 사용자 카드가 자동으로 추가됩니다. – Artemix

답변

13

라인 검출은 종종 Hough 변환을 사용하기 때문에 Canny 에지 검출기와 윤곽 검출은 필요한 경우 편리한 프리 프로세서로만 작동합니다. - 라인의 출력 벡터

라인 : 당신이 평행선이있는 경우 두 번째 매개 변수는 검색을 포함 곳

, 감지 선에 대한

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0) 

를 사용합니다. 각 선은 두 요소 벡터 (ρ, θ)로 표시됩니다. ρ는 좌표 원점 (0, 0) (이미지의 왼쪽 상단 구석)에서부터의 거리입니다. θ는 라디안 (0 ~ 수직선, π/2 ~ 수평선)의 각도 회전 각도입니다.
[opencv2refman.pdf]

이 두 라인 사이의 거리는 거리가 lines의 첫 번째 열에있는 픽셀 값 사이의 절대 차이가 있다는 abs(rho1-rho2)되어야한다는 것을 의미한다. (참고 : 방법은 여기 CV_HOUGH_STANDARD을해야합니다!)

당신이 거리로 생각,하지만 OpenCV의 여전히 감지 된 각 라인의 끝점의 좌표를 제공 할 수 있습니다 무엇인지 정의해야비 평행선을 위해.
method = CV_HOUGH_PROBABILISTIC을 사용해야합니다.

CV_HOUGH_PROBABILISTIC 확률 허프 변환 (영상이 약간 긴 선형 세그먼트를 포함하는 경우 경우 효율적). 은 전체 줄이 아닌 선분을 반환합니다. 각 세그먼트는 시작 지점과 끝 지점으로 표현되는 이고 행렬은 CV_32SC4 유형의 ( 만든 시퀀스가되어야 함)이어야합니다.
[opencv2refman.pdf]

또한 설치된 OpenCV의의 문서 내에서 opencv_tutorials.pdf에서 자습서를 찾을 수 있습니다.

+0

답변 해 주셔서 감사합니다. 다음 단계에서는 내 그림에서 선의 품질을 평가하려고합니다. 선은 홈 가공의 모서리이며 평행해야합니다. 몇 군데에서 그루브 가공이 해제되고 모서리가 더 이상 평행하지 않습니다. 직선과 실제 모서리의 편차를 쉽게 구할 수 있습니까? – marc

+0

허, 잘 모르겠다. 나는 그것을 별도의 질문으로 게시 할 가치가 있다고 생각한다. –

+0

내 대답이 도움이된다면 투표를 수락하거나 수락 할 수 있습니까? –