2016-11-30 113 views
-3

enter image description hereHough Transform在opencv中失敗

這是上圖。我正在使用opencv來處理它,並且我試圖使用Hough變換,但是失敗了。另外,我發現在Hough變換中設置相關參數非常困難。

的代碼如下:

#include <opencv2/opencv.hpp> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat srcImg = imread("srccenter.bmp"); 
    Mat greyImg; 
    cvtColor(srcImg, greyImg, COLOR_BGR2GRAY); 

    std::vector<cv::Vec3f> circles; 

    /// Apply the Hough Transform to find the circles 
    HoughCircles(greyImg, circles, CV_HOUGH_GRADIENT, 1, 10, 100, 20, 0, 0); 

    /// Draw the circles detected 
    for (size_t i = 0; i < circles.size(); i++) 
    { 
     Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 
     int radius = cvRound(circles[i][2]); 
     circle(srcImg, center, 3, Scalar(0, 255, 255), -1); 
     circle(srcImg, center, radius, Scalar(0, 255, 0), 1); 
    } 

    namedWindow("srcImg", WINDOW_NORMAL); 
    imshow("srcImg", srcImg); 
    waitKey(0); 
    return 0; 
} 

但結果是我無法檢測到任何圈子。

我如何檢測內圈?

你有什麼好主意嗎?

+1

你有沒有考慮谷歌「圓檢測opencv」?來吧!甚至有一個官方教程,關於這個http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html – Piglet

+0

我已經提出了我的代碼,請看看。@ Piglet –

+0

爲什麼你的最小和最大半徑是0? 請確保您瞭解參數的作用,並將半徑限制在您期望內圈的範圍內。 – Piglet

回答

1

您需要將min_dist參數更改爲零。該參數用於檢測到的中心之間的最小距離。在你的情況下,這些圈子的中心如此接近。 而且,您還必須更改Canny邊緣檢測器的參數param_1。

+0

您的建議非常有用。正如你所說,我多次改變了相關參數,並最終了解了這些參數。@ zahra rah –