我在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);
}
但这需要太长时间。欢迎任何帮助,谢谢你的关注。
答案 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);
您只需根据需要更改功能参数。