Circle Detection using Java

asked 2013-05-13 12:04:15 -0500

nnarain gravatar image

Hi,

I have been trying to use opencv in java to detect circles. I've had success using c++ and c#(emgucv) but i'm having trouble in java

            Mat frame = new Mat();  
            capture.retrieve(frame);

            Mat hsv = new Mat();
            Imgproc.cvtColor(frame, hsv, Imgproc.COLOR_RGB2HSV);

            Mat threshold = new Mat();
            Core.inRange(hsv, new Scalar(H_MIN, S_MIN, V_MIN,1), new Scalar(H_MAX,S_MAX,V_MAX,1), threshold);

    //      Imgproc.GaussianBlur(threshold, threshold,new Size(3,3), 1.5);

            Mat circles = new Mat();

            Imgproc.HoughCircles(threshold, circles, Imgproc.CV_HOUGH_GRADIENT, 2, threshold.height() / 4, 100, 50, 10, 400);

            /*Drawing image to frame*/
            MatOfByte imgBytes = new MatOfByte();

            Highgui.imencode(".png", threshold, imgBytes);

            byte[] byteData = imgBytes.toArray();

            InputStream in = new ByteArrayInputStream(byteData);

            display = scale(ImageIO.read(in), this.getWidth(), this.getHeight());

            for (int i = 0; i < circles.cols(); i++){

                double[] vecCircle = circles.get(0, i);

                int x = (int) vecCircle[0];
                int y = (int) vecCircle[1];
                int r = (int) vecCircle[2];

                drawCircle(display.createGraphics(), x, y, r);

            }

In this case i'm drawing circles to a buffered image, but they dont seem to be around anything circular.

I've seen a Converter class for Mat to vector but it throws errors. So what is the correct way of doing this?

edit retag flag offensive close merge delete