Untitled

 avatar
unknown
python
16 days ago
2.1 kB
4
Indexable
import cv2
import numpy as np

# Загружаем изображение
image = cv2.imread('image.jpg')

# Преобразуем изображение в пространство цветов HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Определим диапазон для зелёного цвета в HSV
lower_green = np.array([35, 50, 50])   # Нижний порог для зелёного цвета
upper_green = np.array([85, 255, 255]) # Верхний порог для зелёного цвета

# Маска для выделения зелёного цвета
mask = cv2.inRange(hsv, lower_green, upper_green)

# Применяем морфологические операции для очистки изображения от шума
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# Находим контуры
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# Функция для проверки, является ли контур квадратом
def is_square(approx):
    if len(approx) == 4:
        side_lengths = [cv2.norm(approx[i] - approx[(i + 1) % 4]) for i in range(4)]
        return max(side_lengths) - min(side_lengths) < 10  # Точность, можно изменить
    return False

# Перебираем контуры и ищем первый зелёный квадрат
for contour in contours:
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)
    
    if is_square(approx):
        # Рисуем первый найденный зелёный квадрат
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        break  # Останавливаемся на первом найденном квадрате

# Сохраняем результат в файл
cv2.imwrite('output_image.jpg', image)

# Показываем результат
cv2.imshow('Detected Green Square', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Editor is loading...
Leave a Comment