我在Java中使用opencv尝试用眼睛检测图像中的圆圈(虹膜和瞳孔),但是我没有得到预期的结果。
这是我的代码
// convert source image to gray
org.opencv.imgproc.Imgproc.cvtColor(mRgba, imgCny, Imgproc.COLOR_BGR2GRAY);
//fliter
org.opencv.imgproc.Imgproc.blur(imgCny, imgCny, new Size(3, 3));
//apply canny
org.opencv.imgproc.Imgproc.Canny(imgCny, imgCny, 10, 30);
//apply Hough circle
Mat circles = new Mat();
Point pt;
org.opencv.imgproc.Imgproc.HoughCircles(imgCny, circles, Imgproc.CV_HOUGH_GRADIENT, imgCny.rows() / 4, 2, 200, 100, 0, 0);
//draw the found circles
for (int i = 0; i < circles.cols(); i++) {
double vCircle[] = circles.get(0, i);
pt = new Point((int) Math.round((vCircle[0])), (int) Math.round((vCircle[1])));
int radius = (int) Math.round(vCircle[2]);
Core.circle(mRgba, pt, radius, new Scalar(0, 0, 255), 3);
}
我不知道是什么问题。问题是在找到的圆函数的参数中还是其他东西。
有人遇到过这样的问题或者知道如何解决这个问题吗?
答案 0 :(得分:0)
Hough变换无法在这个精确的结果中检测出你想要的圆圈!边缘太多了。您必须先清理图像。
从黑色(瞳孔,虹膜内部)和白色检测开始。这两个区域将划分投资回报率。
此外,我还尝试进行皮肤检测(HSV色彩空间的简单阈值。它将消除90%的研究领域。