HoughCircles finds the wrong circles (opencv)

I have the following picture, and what I really want to discover is the circles above the box with the letter in the upper left corner of each window. But as a result, he discovers other circles. I have no idea why.

Image I want to detect:

http://imgur.com/8oKmhGp

Here is the result:

http://imgur.com/qBw6YhK

As you can see, he can sometimes find letters in circles, as well as circles on lego. Here is my code:

Mat source = Highgui.imread("testar.jpg", Highgui.CV_LOAD_IMAGE_COLOR);
            Mat destination = new Mat(source.rows(), source.cols(), source.type());

            Imgproc.cvtColor(source, destination, Imgproc.COLOR_RGB2GRAY);

            Imgproc.GaussianBlur(destination, destination, new Size(3,3),0,0); 


            Mat circles = new Mat();
            Imgproc.HoughCircles(destination, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 10, 20, 7, 13);

            int radius;
            Point pt;
            for (int x = 0; x < circles.cols(); x++) {
            double vCircle[] = circles.get(0,x);

            if (vCircle == null)
                break;

            pt = new Point(Math.round(vCircle[0]), Math.round(vCircle[1]));
            radius = (int)Math.round(vCircle[2]);

            // draw the found circle
            Core.circle(destination, pt, radius, new Scalar(0,255,255), 3);
            Core.circle(destination, pt, 3, new Scalar(255,255,255), 3);
            }

            Highgui.imwrite("foundCircles.jpg", destination);
+4
source share
1 answer

Well IMHO, the Hough Circle detection algorithm works exactly the way it should be. He discovers circles.

, , .

, - ( ).

Rect :

Rect cropRect = new Rect(topLeft_X, topLeft_Y, widthOfRectangle, heightOfRectangle);

( ), :

Mat croppedImage = new Mat(inputImg, cropRect);

, , - .


, - , , (.. ), Hough, O S , OCR, .

Java, Tess4J. , . ( OCR, , - )

, Hough Circle .

, OCR, , Java.


(, OCR, , ), , .... Hough Line.

, , .

+3

Source: https://habr.com/ru/post/1541973/


All Articles