2014-12-05 234 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()); 
    } 

這產生了一個完美的形象。![繪製4圈] [3]現在,我要運行這個圖像上找到的輪廓代碼。但是,Visual Studio會拋出未處理的異常。我應該做些什麼來檢測四個圈子?

+1

findContours假定二值圖像作爲輸入,您ContourOutline是BGR的彩色圖像。 – Micka 2014-12-05 15:11:36

+1

謝謝。我忘了那個。它現在有效。 – 2014-12-12 09:41:20

+0

很高興聽到。我會寫一個答案來幫助別人。 – Micka 2014-12-12 09:48:30

回答

0

創建ContourOutline作爲CV_8UC3元件矩陣,其中(可能)意思是一個BGR彩色圖像,但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()); 
}