В данной статье рассматривается использование функции HoughCircles из библиотеки OpenCV для распознавания кругов на изображениях при помощи языка программирования Delphi. Это может быть полезно, например, для анализа качества шаров или определения положения объектов в виде кругов.
Основы работы с HoughCircles
Функция HoughCircles предназначена для обнаружения круговых форм на серых изображениях. Она использует метод преобразования Хоуфа, который позволяет вычислить параметры окружностей (центр и радиус) на основе найденных границ.
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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.