agrobot_base/Python/street-suggar-recognize/street-recognize-color2.py

59 lines
2.0 KiB
Python

import cv2
import numpy as np
# Carregar a imagem
image = cv2.imread('foto1.jpg') # Substitua 'foto2.jpg' pelo caminho da sua imagem
# Converter para o espaço de cores HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Definir limites para a cor verde ampliada em HSV
lower_green = np.array([30, 40, 40]) # Valores de cor verde em HSV
upper_green = np.array([90, 255, 255])
# Criar máscara para a cor verde estendida
mask_green = cv2.inRange(hsv, lower_green, upper_green)
# Salvar a imagem temporária com o resultado da máscara
cv2.imwrite('mask_green_result.jpg', mask_green)
# Carregar a imagem temporária
temp_image = cv2.imread('mask_green_result.jpg')
# Converter a imagem para tons de cinza
gray_temp_image = cv2.cvtColor(temp_image, cv2.COLOR_BGR2GRAY)
# Definir uma região de interesse no lado esquerdo da máscara
height, width = gray_temp_image.shape[:2]
roi_left = gray_temp_image[0:height, 0:width // 2]
# Encontrar a linha onde ocorre a transição de preto para branco mais próxima do centro e do topo
contours, _ = cv2.findContours(roi_left, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
max_distance_center = 0
max_distance_top = 0
selected_contour = None
for contour in contours:
for point in contour:
x, y = point[0]
distance_center = abs(x - width // 4) # Distância do ponto ao centro
distance_top = y # Distância do ponto ao topo
if distance_center > max_distance_center and distance_top > max_distance_top:
max_distance_center = distance_center
max_distance_top = distance_top
selected_contour = contour
# Sobrepor o ponto na imagem original
if selected_contour is not None:
for point in selected_contour:
x, y = point[0]
x += width // 4 # Ajustar a posição para a imagem original
cv2.circle(image, (x, y), 5, (0, 255, 0), -1)
# Mostrar a imagem com o ponto destacado
cv2.imshow('Imagem com Ponto na Linha de Transição', temp_image)
cv2.waitKey(0)
cv2.destroyAllWindows()