Я написал программу, которая ищет те детали, которые имеют круглые элементы (отверстия, форму и т.д.). Программа должна описать эллипс определенного цвета вокруг найденных контуров и вывести координаты его центра. С одной стороны программа при запуске не выдает никаких ошибок, с другой она не может найти контуры. Код самой программы:
import cv2
import numpy as np
import math
# задаем диапазон цветов для поиска (в данном случае - серый)
hsv_min = np.array((0, 0, 50), np.uint8)
hsv_max = np.array((180, 50, 220), 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()