Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Распознавание кругов с помощью HoughCircles в Delphi с OpenCV 4.10

Delphi , Графика и Игры , OpenGL

В данной статье рассматривается использование функции HoughCircles из библиотеки OpenCV для распознавания кругов на изображениях при помощи языка программирования Delphi. Это может быть полезно, например, для анализа качества шаров или определения положения объектов в виде кругов.

Основы работы с HoughCircles

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

Параметры HoughCircles

  • gray - входное изображение в градациях серого.
  • circles - вектор, хранящий параметры найденных окружностей.
  • HOUGH_GRADIENT - метод обнаружения, основанный на градиенте.
  • dp - инвертированное отношение разрешения (обычно 1).
  • min_dist - минимальное расстояние между центрами обнаруживаемых кругов (может быть установлено как gray.rows/16 для начала).
  • param_1 и param_2 - параметры, используемые внутренним детектором границ Canny.
  • min_radius и max_radius - минимальный и максимальный радиус обнаруживаемых кругов.

Пример кода

procedure TForm1.FindCircles(const AMat: TMat);
var
  ImgGray, Circles: TMat;
  Circle, Center: TPoint;
  Radius: integer;
  i: integer;
begin
  cvtColor(AMat, ImgGray, COLOR_BGR2GRAY);
  MedianBlur(ImgGray, ImgGray, 3);

  HoughCircles(ImgGray, Circles, HOUGH_GRADIENT, 1,
              ImgGray.rows/16, // Измените этот параметр для обнаружения кругов на разных расстояниях
              Param1, Param2, RadiusMin, RadiusMaks);

  for i := 0 to Circles.cols - 1 do begin
    Circle := Circles.get(i); // Получаем массив с координатами центра и радиусом для текущего круга
    Center.X := Circle[0];
    Center.Y := Circle[1];
    Radius := Circle[2];

    // Рисуем круг на изображении
    cv.Circle(ImgGray, Center, Radius, clRed);

    // Рисуем центр окружности
    cv.Circle(ImgGray, Center, 3, clGreen);
  end;
end;

Получение количества обнаруженных кругов

Для получения количества обнаруженных кругов используется свойство Circles.cols, которое возвращает количество элементов в векторе.

const CirclesCount = Circles.cols;

Важные замечания

  • При работе с типами данных OpenCV важно помнить, что они могут быть представлены в различных форматах и требуют соответствующего преобразования для использования.
  • Параметры min_radius и max_radius используются для ограничения размеров обнаруживаемых кругов. Если неизвестны, можно установить 0.

Заключение

Использование функции HoughCircles в Delphi с библиотекой OpenCV позволяет эффективно распознавать круговые формы на изображениях. Важно правильно настроить параметры для получения оптимальных результатов.


Статья подготовлена на основе вопроса пользователя GRU и примера из ответа пользователя MBo.

Создано по материалам из источника по ссылке.

Статья посвящена использованию функции HoughCircles из библиотеки OpenCV для обнаружения кругов на изображениях в среде программирования Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OpenGL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 18:57:34/0.0037050247192383/0