Попытка получить центр круга с помощью opencv - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь определить центр круга.Я пытаюсь сделать это с помощью cvHoughCircle.Но я не могу заставить его работать должным образом.

enter image description here

Единственное, что может измениться, - это размер круга.

Я пытаюсь определить круг, выполнив:

circle = cvHoughCircles(imgThreshold, storage, CV_HOUGH_GRADIENT, 1,
(double)imgThreshold.height()/20, 200, 20, 0, 0);

imgThreshold - это черно-белое изображение, которое вы можете увидеть здесь.Разрешение изображения на самом деле 1280 * 1024.

Может кто-нибудь сказать мне, что я делаю неправильно.

Ответы [ 4 ]

3 голосов
/ 22 февраля 2012

Вместо использования cvHoughCircle можно решить эту проблему с небольшим количеством математики:

        CvMoments moments = new CvMoments();

        cvMoments(imgThreshold, moments, 1);

        double moment10 = cvGetSpatialMoment(moments, 1, 0);
        double moment01 = cvGetSpatialMoment(moments,0,1);
        double area = cvGetCentralMoment(moments, 0, 0);

         int posX = 0;
         int posY = 0;

        int lastX = posX;
        int lastY = posY;

        posX = (int) (moment10/area);
        posY = (int) (moment01/area);

        cvCircle(iplRgbImage, new CvPoint(posX,posY), 3, CvScalar.GREEN, -1, 8, 0);

source = http://aishack.in/tutorials/tracking-colored-objects-in-opencv/

2 голосов
/ 23 февраля 2012

Если круг завершен и заполнен и не перекрыт другими формами, вы можете использовать findContours () и затем найти центр контура.

1 голос
/ 25 февраля 2012

используйте cvBlob

https://code.google.com/p/cvblob/

0 голосов
/ 21 марта 2012

Относительно преобразования Хафа он может обнаруживать круги, идентифицируя пиксели, принадлежащие периферии окружности.Точнее, учитывая двоичное (пороговое) изображение, содержащее, например, белые пиксели вдоль циклического пути, преобразование грубой окружности обнаружит окружность.Таким образом, изображение для подачи алгоритма должно быть двоичным и с пороговым значением, но в вашем примере это должен быть пороговый пример краевого фильтра (бывшего Собеля), а не сплошной закрашенный круг.

Я не могу сказать, как правильно "подогнать" кружок на изображении выше, но центр тяжести капли, извлеченной из подключенных компонентов, - хороший и быстрый путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...