Untitled
unknown
python
13 days ago
6.0 kB
3
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