我正在使用opencv和java在图像上查找圆,到目前为止,我的图像如下。
我正在用霍夫用这样的代码找到圆圈:

    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());

但是无论有没有模糊,我都会得到一个空的Mat以得到结果。
我应该如何修复此代码?

编辑:
嗨,大家好!

谢谢你,我现在有这张照片。我正在使用以下参数:
Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 50, 10, 10, 40);

在检测之前,我仍在使用中位数模糊。

剩下的唯一问题是为什么它能检测到这些小圆圈?我已经附上了精明的侦查结果,我认为圈子很明显。

最佳答案

首先,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-因为我是C++用户,所以请原谅我将所有结构都放入该格式。您可以轻松地将逻辑扩展到Java。 :)

关于java - 查找圈子图像处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19983976/

10-12 17:15
查看更多