Untitled
unknown
python
9 months ago
6.0 kB
6
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
# Переменная для последнего квадрата
last_square = None
# Перебираем контуры и ищем последний зелёный квадрат
for contour in contours:
epsilon = 0.04 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
if is_square(approx):
last_square = approx # Сохраняем последний найденный квадрат
# Если квадрат найден, рисуем его и находим координаты середины
if last_square is not None:
# Рисуем последний найденный зелёный квадрат
cv2.drawContours(image, [last_square], -1, (0, 255, 0), 2)
# Вычисляем центр квадрата
M = cv2.moments(last_square)
if M["m00"] != 0: # Проверка на деление на 0
cx = int(M["m10"] / M["m00"])
cy = int(M["m01"] / M["m00"])
else:
cx, cy = 0, 0 # Если момент равен 0, значит, квадрат не найден корректно
# Отображаем координаты середины
print(f"Координаты центра последнего квадрата: ({cx}, {cy})")
# Отображаем точку центра
cv2.circle(image, (cx, cy), 5, (0, 0, 255), -1)
# Сохраняем изображение с последним квадратом и его центром
cv2.imwrite('output_last_square.jpg', image)
print("Последний зелёный квадрат найден и сохранён!")
else:
print("Зелёный квадрат не найден.")
# Показываем результат
cv2.imshow('Detected Last Green Square', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Editor is loading...
Leave a Comment