В формате OpenCV Линукс преобразования Хафа круг
Я использую код из страницы. Это работает на большинстве моих изображений. Но на прикрепленном изображении он не работает-код не распознает внешний циферблат / границу датчика (в моем исходном изображении нет внутреннего белого круга)
Есть идеи, что может пойти не так?
1 ответ:
Это то, что вы ищете...
Если это так, то речь идет о настройке нескольких параметров. В частности, минимальный и максимальный радиус окружности и circle_distance (минимальное расстояние между обнаруженными окружностями).
СутьЗдесь .
Обновить
если вы хотите связать минимальный радиус с размерами изображения, вы можете сделать что-то вроде этого:float minRadius = MIN(img.size().width, img.size().height) * 0.5;
И передайте это в функцию houghCircles.
Параметры я фактически используется (согласно сути):
HoughCircles( img , circles , CV_HOUGH_GRADIENT //method – Detection method to use. // Currently, the only implemented method is // CV_HOUGH_GRADIENT , which is basically 21HT , // described in [Yuen90]. , 1 //p – Inverse ratio of the accumulator resolution to the // image resolution. For example, if dp=1 , the accumulator has // the same resolution as the input image. If dp=2 , // the accumulator has half as big width and height. , 60 //minDist – Minimum distance between the centers of the // detected circles. If the parameter is too small, multiple // neighbor circles may be falsely detected in addition to a // true one. If it is too large, some circles may be missed. , 100 //cannyThreshold – The higher threshold of the two // passed to the gpu::Canny() edge detector // (the lower one is twice smaller). , 30 //votesThreshold – The accumulator threshold for the circle // centers at the detection stage. The smaller it is, the more // false circles may be detected. , 250 //minRadius – Minimum circle radius. , 300 //maxRadius – Maximum circle radius. );
Комментарии взяты издокументации openCV .