2013-01-11 3 views
7

opencv를 사용하여 둥근 모서리가있는 직사각형을 검출 할 때 문제를 해결해야합니다. 기본적으로 나는 동일한 코드 샘플 squares.c 사용하고 있습니다 : 난 보통 이미지를 감지 할 수있는이 코드둥근 모서리가있는 직사각형에서 모서리 점 검출

cvFindContours(gray, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); 
while(contours) 
{ 
    double area=fabs(cvContourArea(contours, CV_WHOLE_SEQ)); 
    if(area < minimum_area || area > maximum_area) { 
     contours = contours->h_next; 
     continue; 
    }    
    result = cvApproxPoly(contours, sizeof(CvContour), storage, 
     CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.05, 0); 
    if(result->total == 4 && 
     fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 1000 && 
     cvCheckContourConvexity(result)) 
     { 

을, 그러나 나는 이미지의 관점을 조정해야하고 그것을 위해 나는 이미지의 모서리를 감지 할 필요가 ,이 작업을 수행하는 방법과 이미지가 모서리를 둥글게했습니다? 문제는 포인트간에 감지 할 필요가 없기 때문에 발생합니다. 예를 들어, 검은 선은 기존 코드에서 감지 한 점을 나타내고 파란색 점은 필요한 점을 나타냅니다. 어떤 도움

enter image description here

감사의가.

+0

"문제를 해결해야합니다." "내 문제를 해결할 준비가 된 OpenCV 기능을 원한다"는 의미입니까? 문제는 검은 점의 간단한 지능형 순서에 의해 해결됩니다. 거기에서 네 개의 파란색 모서리를 만듭니다. – mmgp

+0

@mmgp 검은 점을 주문 하시겠습니까? 하지만 검은 점에는 파란색 점이 포함되어 있지 않습니다! – Ricardo

+0

해결책을 찾은 곳은 다음과 같습니다. http://stackoverflow.com/questions/22519545/automatic-perspective-correction-opencv – delkant

답변

0

cvResize 명령을 사용하여 이미지를 더 작은 크기로 조정하고 해당 코드를 적용 해보십시오. 이론적으로 이미지 크기를 줄이면 이미지 모서리가 선명 해지고 문제가 줄어들어 정밀도가 떨어집니다.

+0

메모는 매우 잘 작동하지만 크기를 조정할 때 괜찮은 보간 설정을 사용해야합니다. 가장 가까운 이웃이 아닌 큐빅이다. –

2

OpenCV 용어에서 을 사용하여 RETR_EXTERNALCHAIN_APPROX_SIMPLE을 사용하여 검은 색 사각형을 찾습니다. 이제 FindContours에있는 점에 minAreaRect을 사용하여이 둥근 사각형의 최소 경계 상자를 찾습니다. 이 경계 상자의 모서리를 가져 오려면 minAreaRect의 반환 (가운데, (너비, 높이), 회전 각도) 함수에 BoxPoints 함수를 사용합니다. 이제 네가 따라오고있는 빨간 선의 네 구석이있다.

+0

minAreaRect는 실제로 직사각형을 반환하고 빨간색 선 원하는 결과 예제와 같은 사변형을 반환하지 않습니다. – Wicpar

0

나는 문제가 있었지만 다른 답변은 도움이되지 않았습니다. 내 경우에는 오른쪽 상단에 빠진 구석이있는 올바른 데이터 매트릭스를 원근감을 가지고 해리스 탐지에서 반올림 해 보았습니다.

이 문제를 해결하려면 원하는 모양을 찾은 다음 윤곽의 볼록한 선체를 가져옵니다. 일단 당신이 그것을 가지고 있다면 가장 긴 4 줄을 추출해야합니다. (opencv 함수가 없으므로 추출 기능을 직접 만들어야합니다.) 그러면 4 줄의 교차점 (사용자 고유의 함수)을 얻고 그것을 다시 변환합니다 원근 보정을위한 매트릭스로.

매체를 구부리거나 결함이있을 수있는 경우 주변 점에 비해 각도가 높은 점을 삭제하여 최종 점에서 편차가 발생할 수 있습니다.