houghcircles opencv检测多个圆

houghcircles opencv检测多个圆,opencv,Opencv,我正在尝试使用java和opencv中的HoughCircles方法检测一幅图像中的多个圆。我可以探测到所有圆圈,但一次只能探测一个(见图) 我没有发现任何其他人有类似的问题,除了当他们把minDist放得太高,但我不能再降低它,因为它已经是1。我也尝试过使用param2和param1进行实验,但没有多大帮助 public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

我正在尝试使用java和opencv中的HoughCircles方法检测一幅图像中的多个圆。我可以探测到所有圆圈,但一次只能探测一个(见图)

我没有发现任何其他人有类似的问题,除了当他们把minDist放得太高,但我不能再降低它,因为它已经是1。我也尝试过使用param2和param1进行实验,但没有多大帮助

public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    Mat source = Imgcodecs.imread("C:\\Users\\Anton\\Desktop\\Cirkel.png");
    Mat grey = new Mat();
    Imgproc.cvtColor(source, grey, Imgproc.COLOR_BGR2GRAY);
    Mat circles = new Mat();
    double dp = 1;
    int minDist = 1;
    int param2 = 15;
    int param1 = param2*2;
    int minRadius = 0;
    int maxRadius = 5000;
    Imgproc.HoughCircles(grey, circles, Imgproc.HOUGH_GRADIENT,dp, minDist, param1, param2, minRadius, maxRadius);

    if (!circles.empty()) {
        double x;
        double y;
        int r;
        for (int i = 0; i < circles.rows(); i++) {
            double[] data = circles.get(i, 0);
            for (int j = 0; j < data.length; j++) {
                x = data[0];
                y = data[1];
                r = (int) data[2];
                Imgproc.circle(source, new Point(x,y), r, new Scalar(0,0,255),3);
            }
        }
    } else {
        System.out.println("geen circles");
    }
    BufferedImage bi = Mat2BufferedImage(source); 
    displayImage(bi);

}
publicstaticvoidmain(字符串[]args){
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
Mat source=Imgcodecs.imread(“C:\\Users\\Anton\\Desktop\\Cirkel.png”);
灰色材料=新材料();
Imgproc.cvt颜色(来源,灰色,Imgproc.COLOR\u bgr2灰色);
垫圆=新垫();
双dp=1;
int minDist=1;
int参数2=15;
int param1=param2*2;
int minRadius=0;
int最大半径=5000;
Imgproc.HOUGH圆(灰色,圆,Imgproc.HOUGH_梯度,dp,Minist,param1,param2,minRadius,maxRadius);
如果(!circles.empty()){
双x;
双y;
INTR;
对于(int i=0;i
您应该像这样迭代

for(int i=0;i

而不是


for(inti=0;i

你能上传图像吗?您应该使用圆圈的大小进行迭代。我无法添加图像,因为我的帐户是新的。他们是这样的:你是对的,迭代是错误的。我不知道如何迭代大小,但迭代圆.cols()而不是圆.rows()会有所帮助。谢谢伟大的我加上这个作为回答!