检测Hough圈子android

我正在尝试使用android检测圈子。 我成功地实现了检测线算法,但在尝试绘制hough circle algoritm时没有显示任何内容。

这是我的代码:

Mat thresholdImage = new Mat(getFrameHeight() + getFrameHeight() / 2, getFrameWidth(), CvType.CV_8UC1); mYuv.put(0, 0, data); Imgproc.cvtColor(mYuv, destination, Imgproc.COLOR_YUV420sp2RGB, 4); Imgproc.cvtColor(destination, thresholdImage, Imgproc.COLOR_RGB2GRAY, 4); Imgproc.GaussianBlur(thresholdImage, thresholdImage, new Size(9, 9), 2, 2 ); Mat circles = new Mat(); Imgproc.HoughCircles(thresholdImage, circles, Imgproc.CV_HOUGH_GRADIENT, 1d, (double)thresholdImage.height()/70, 200d, 100d); Log.w("circles", circles.cols()+""); for (int x = 0; x < circles.cols(); x++) { double vCircle[]=circles.get(0,x); Point center=new Point(Math.round(vCircle[0]), Math.round(vCircle[1])); int radius = (int)Math.round(vCircle[2]); // draw the circle center Core.circle(destination, center, 3,new Scalar(0,255,0), -1, 8, 0 ); // draw the circle outline Core.circle( destination, center, radius, new Scalar(0,0,255), 3, 8, 0 ); } 

你可能已经将它排序了,但有些事情。 我检查你的圈子垫子实际上有一些结果; 有时vCircle似乎回来了null; 尝试其他版本的HoughCircles:

 iCannyUpperThreshold = 100; iMinRadius = 20; iMaxRadius = 400; iAccumulator = 300; Imgproc.HoughCircles(thresholdImage, circles, Imgproc.CV_HOUGH_GRADIENT, 2.0, thresholdImage.rows() / 8, iCannyUpperThreshold, iAccumulator, iMinRadius, iMaxRadius); if (circles.cols() > 0) for (int x = 0; x < circles.cols(); x++) { double vCircle[] = circles.get(0,x); if (vCircle == null) break; Point pt = new Point(Math.round(vCircle[0]), Math.round(vCircle[1])); int radius = (int)Math.round(vCircle[2]); // draw the found circle Core.circle(destination, pt, radius, new Scalar(0,255,0), iLineThickness); Core.circle(destination, pt, 3, new Scalar(0,0,255), iLineThickness); } 

(我把你的代码换成了我的代码,重新命名了一些东西然后把它换回去,我我已经把它拿回来了,所以它有效......)

B.