Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2023, 18:09   #1
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию Проблема с выводами контура в изображениях на openncv

Я написал программу, которая ищет те детали, которые имеют круглые элементы (отверстия, форму и т.д.). Программа должна описать эллипс определенного цвета вокруг найденных контуров и вывести координаты его центра. С одной стороны программа при запуске не выдает никаких ошибок, с другой она не может найти контуры. Код самой программы:
Код:
import cv2
import numpy as np
import math
 
# задаем диапазон цветов для поиска (в данном случае - синий)
hsv_min = np.array((100, 50, 50), np.uint8)
hsv_max = np.array((130, 255, 255), np.uint8)
 
# открываем изображение
image=r"C:\1\detail.jpg"
img = cv2.imread(image)
 
# конвертируем изображение в HSV-пространство
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
 
# создаем маску для поиска объектов с заданным цветом
mask = cv2.inRange(hsv, hsv_min, hsv_max)
 
# находим контуры объектов на изображении
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 
# перебираем контуры и ищем эллипсы
if contours:
    for cnt in contours:
        # находим площадь контура
        area_a = cv2.contourArea(cnt)
        
        # если контур состоит из больше чем 5 точек
        if len(cnt) > 5:
            # находим эллипс, подходящий по форме под контур
            ellipse = cv2.fitEllipse(cnt)
            
            # вычисляем площадь эллипса
            area = int(math.pi * ellipse[1][0] * ellipse[1][1] / 4)
            
            # если эллипс соответствует условиям
            if area > 1200 and math.fabs(area - area_a) < 470:
                # находим центр эллипса
                center = (int(ellipse[0][0]), int(ellipse[0][1]))
                
                # отображаем контур на изображении
                cv2.drawContours(img, [cnt], 0, (200, 100, 25), 4)
                
                # отображаем эллипс на изображении
                cv2.ellipse(img, ellipse, (200, 100, 25), 4)
                
                # добавляем подпись к контуру
                cv2.putText(img, f"Center: {center}", (center[0] + 20, center[1] - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
else:
    print("контуры не найдены")
 
# выводим результаты на изображение
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
изображение без контура:
Снимок.jpg
himecu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идентификация заданного объекта на различных изображениях sdfFssFS Общие вопросы C/C++ 102 22.03.2017 15:34
Прозрачный фон в изображениях на форме goo C++ Builder 0 20.10.2012 21:39
Прямое управление выводами COM и LPT портов CopperRU C# (си шарп) 5 11.04.2012 13:29
Методы диффузии в изображениях risya Мультимедиа в Delphi 1 07.06.2009 11:30
Проблема с выводами данных на экран монитора КОСМО Общие вопросы C/C++ 3 01.02.2009 11:35