Java 寻找圆的图像处理
我正在使用opencv和java查找图像上的圆,到目前为止,我有下面的图像。 我使用Hough来查找代码如下的圆:Java 寻找圆的图像处理,java,opencv,image-processing,geometry,hough-transform,Java,Opencv,Image Processing,Geometry,Hough Transform,我正在使用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, c
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
剩下的唯一问题是为什么它能检测到这些小圆圈?我已经附上了精明的检测结果,我认为圆圈是可以看到的
您确定提供的是半径而不是直径吗?尝试更宽的半径范围(例如10-100)
在祖马使用OpenCV作弊?:) 首先,
圆圈
结构不应该是cv::Mat
,而应该是std::vector
;我想这就是你没有得到任何结果的原因。。有关详细信息,请参阅上的文档
用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);
cv::medianBlur(测试圈,测试圈,7);
std::向量圆;// 我已经测试了我的代码,它是用C#编写的(我认为java是一样的),结果是:
您可以在HoughAlgorithm.cs类中找到我的代码
我的演示项目
Mat可用作OpenCV中点向量的容器。大多数接受点向量的函数都会接受Mat并正确使用它。事实上,在OpenCV的几个版本之前,有些函数需要将vector强制转换为Mat。但是我同意用Mat代替vector有点混乱,我使用Mat,因为函数需要Java中的Mat,当我只找到一个圆时,Mat中只有3个值@Michaelburdinov你似乎有很多假阳性。
//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;
}
}