Поиск кругов обработка изображений
Я использую opencv и java, чтобы найти круги на изображении, у меня есть изображение ниже до сих пор. Я использую Hough, чтобы найти круги с кодом следующим образом:
Imgproc.medianBlur(result, result, 3);
Imgproc.medianBlur(result, result, 3);
Imgproc.medianBlur(result, result, 3);
Mat circles = new Mat();
Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 200, 100, 30, 40);
System.out.println(circles.dump());
Но я получаю пустой мат для результата с размытием и без него. Как мне исправить этот код?
Редактировать: Привет, ребята!
Благодаря вам у меня теперь есть эта картина. Я использую следующие параметры:Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 50, 10, 10, 40);
Я все еще использую medianBlur до обнаружения.
Единственный вопрос левый-почему он обнаруживает эти маленькие круги? Я приложил результат хитрого обнаружения, я думаю, что круги довольно заметны .
3 ответа:
Во-первых, структура
circles
не должна бытьcv::Mat
, а должна бытьstd::vector<cv::Vec3f>
; я думаю, именно поэтому вы не получаете никаких результатов.. Пожалуйста, обратитесь к документации на HoughCircles для получения подробной информации..Играя со значениями в течение 5 минут, у меня есть для вас эта отправная точка:
Параметры, которые я использовал,
cv::medianBlur(test_Circle, test_Circle, 7); std::vector<cv::Vec3f> circles; // <- not that "circles" is not cv::Mat cv::HoughCircles(test_Circle, circles, CV_HOUGH_GRADIENT, 1, 1, 300, 10, 10, 50);
Вы можете получить гораздо более определенный результат после того, как немного поиграете со значениями.
PS-так как я с++ пользователь, пожалуйста, извините меня за то, что я помещаю все свои структуры в этот формат. Вы можете легко расширить логику на Java. :)
Вы уверены, что предоставляете радиус, а не Диаметр? Попробуйте использовать более широкий диапазон радиусов (например, 10-100).
Использование OpenCV для мошенничества в Zuma? :)
Я протестировал свой код, он написан на C# (я думаю, что java то же самое) и получил результат:1
Вы можете найти мой код в HoughAlgorithm.классе по информатике Мой демо-проект Здесь
//DP_Resolution: 1 //MinDistance :32 //CannyThreshold: 10 //AccuThreshold: 10 //MinRadius: 13 //MaxRadius: 20 public static CvSeq DetectCircles(IplImage pImage, CamEnum _camName) { try { CvMemStorage memStorage = cvlib.CvCreateMemStorage(0); return cvlib.CvHoughCircles(ref pImage, memStorage.ptr, 3, 1, 32, 10, 10, 13, 20); } catch { throw; } }