2016-08-21 3 views
0

У меня есть следующий образ:

Когда я использую поджилки преобразования в MATLAB, я получаю 100% обнаружение кругов.преобразование Хаф в MATLAB против OpenCV CPP

Я использую следующий код в MATLAB:

[centersDark, radiiDark] = imfindcircles(closed_pic,[Rmin Rmax],'ObjectPolarity','dark'); 

Я использую следующий код в CPP:

cv::medianBlur(mat, mat, 5);  
cv::Mat grayMat;  
cv::cvtColor(mat, grayMat, cv::COLOR_BGR2GRAY);  
std::vector<cv::Vec3f> circles1;  
cv::HoughCircles(grayMat, circles1, CV_HOUGH_GRADIENT, 1, 20, 30, 30, 0, 0); 

Кроме того, когда я пытаюсь запустить HOUGH transforn в CPP на бинарном изображении, я дон Не получится. Что я могу сделать, чтобы он работал?

ответ

0

Посмотрите на параметры, также посмотрите на вывод медианного размытия, если выход имеет смысл в качестве входных данных для кругов hough. Ваши 20 параметров - это минимальное центральное расстояние. Когда круги ближе. Алг может потерпеть неудачу. Также вы используете 30,30 параметров, которые выглядят как пороговые значения, переданные в canny() обнаружение краев, и это первый и второй пороговые значения. Кроме того, это также проблема для этих пороговых значений. Если вы не указали параметры, используйте пример из документации и обновите только четкие параметры. В этом примере приведены только последние 2 мин и максимальный радиус объекта, что вы пытаетесь найти.

HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 
      2, gray->rows/4, 200, 100); 
+0

hi ... когда вы пишете 0 как max и min, это похоже на то, что вы пишете, не заботитесь ... те же параметры работают на другом рисунке, поэтому я не думаю, что это проблема. – ilana

+0

OK смысл. Я обновляю сообщение, Code просто скажу, есть ли 0 0 put max как max (cols, rows) и min radius как 0 – globalex