2014-12-05 3 views
0

4 개의 원이 포함 된 인터넷에서 임의의 이미지를 사용했습니다. [그러나 opencv 세분화 코드는 307 개의 윤곽을 감지합니다. 그러나 나는 단지 4 개의 동그라미를 찾고 싶다. 그래서 노이즈를 제거하기 위해 이미지를 흐리게 처리하려고했습니다. 그러나 여전히 도움이되지 않습니다. 다음 코드를 사용했습니다.그림을 그린 후 윤곽 찾기

Mat ContourOutline = Mat::zeros(cannyEdges.size(), CV_8UC3); 
    for (int i = 0; i < contours.size(); i++) 
    { 
     cout << "Area of contour " << i << "=" << contourArea(contours[i])<<"\n"; 
     Scalar color = Scalar(0,0,255); 
     drawContours(ContourOutline, contours, i, color, 2, 8, hierarchy, 0, Point()); 
    } 

이렇게하면 완벽한 이미지를 만들 수 있습니다. [drawn 4 circles] [3] 이제이 이미지에서 등고선 찾기 코드를 실행하고 싶습니다. 그러나 Visual Studio에서 처리되지 않은 예외가 발생합니다. 4 개의 동그라미를 감지하려면 어떻게해야합니까?

+1

findContours 입력으로 바이너리 이미지를 가정하여 ContourOutline가 BGR 컬러 이미지입니다. – Micka

+1

감사합니다. 나는 그것을 잊었다. 이제 작동합니다. 반갑습니다. –

+0

. 나는 다른 사람들을 돕기위한 답을 쓸 것이다. – Micka

답변

0

당신은 (아마도)를 BGR 컬러 화상으로 의미 CV_8UC3 소자 매트릭스로서 ContourOutline 만들지 만 findContours 입력으로 입력 CV_8UC1의 이진 화상을 사용한다.

이 코드를보십시오 :

Mat ContourOutline = Mat::zeros(cannyEdges.size(), CV_8UC1); 
for (int i = 0; i < contours.size(); i++) 
{ 
    cout << "Area of contour " << i << "=" << contourArea(contours[i])<<"\n"; 
    Scalar color = Scalar(255); 
    drawContours(ContourOutline, contours, i, color, 2, 8, hierarchy, 0, Point()); 
}