Android OpenCV - 使用HoughCircles检测点的问题

时间:2014-12-03 18:56:36

标签: java android opencv image-processing

我在google上搜索了使用OpenCV android(Java)库的图像检测点的解决方案。我只需要检测一些相同颜色的点。

我尝试使用那些使用HoughCircles方法的不同代码,但没有用。

如果有任何可以给我一个想法,我会非常感谢你。

更新:我正在使用Imgproc.HoughCircles方法,如何修复检测点的参数?

我找到了这段代码并使用参数

Mat imgCirclesOut = sourceImage.clone();

Imgproc.cvtColor(sourceImage, sourceImage, Imgproc.COLOR_RGB2GRAY);

Imgproc.GaussianBlur( sourceImage, sourceImage, new Size(9, 9), 2, 2 );

Imgproc.HoughCircles( sourceImage, imgCirclesOut, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 1, 1, 1, 10000 );

float circle[] = new float[3];

Log.d ("InvisicodeAppDebug","imgCirclesOut.cols(): " + imgCirclesOut.cols());
for (int i = 0; i < imgCirclesOut.cols(); i++)
{
    imgCirclesOut.get(0, i, circle);
    org.opencv.core.Point center = new org.opencv.core.Point();
    center.x = circle[0];
    center.y = circle[1];
    Core.circle(sourceImage, center, (int) circle[2], new Scalar(255,0,0,255), 4);
}

但这需要太长时间。欢迎任何帮助,谢谢你的关注。

1 个答案:

答案 0 :(得分:1)

我有办法解决问题。

首先,我改善了灰度图像。

Imgproc.GaussianBlur ( grayscaleWorkingImage,  grayscaleWorkingImage, new Size(1,1), 0);

Core.addWeighted( grayscaleWorkingImage, 1.5, grayscaleWorkingImage, -0.5, 0, grayscaleWorkingImage);

在形态学黑帽Morphology Reference

时反转图像
Mat kernel = Imgproc.getStructuringElement ( Imgproc.MORPH_RECT, new Size (10,10));

Imgproc.morphologyEx ( inversedGrayscaleWorkingImage, inversedGrayscaleWorkingImage, Imgproc.MORPH_BLACKHAT, kernel, new Point (1,1), 20);

再次改善图像

Imgproc.GaussianBlur ( inversedGrayscaleWorkingImage,  inversedGrayscaleWorkingImage, new Size(1,1), 0);

最后,我可以找到HoughCircles HoughCircles Reference

的点数
Imgproc.HoughCircles( inversedGrayscaleWorkingImage, controlPointsImg, Imgproc.CV_HOUGH_GRADIENT, 1, 299, 99, 3, 3, 7); 

您只需根据需要更改功能参数。