import cv2 import numpy as np # Carregar a imagem imagem = cv2.imread('foto4.jpg') # Certifique-se de que o caminho da imagem está correto # Converter a imagem para o espaço de cores HSV (Matiz, Saturação, Valor) hsv = cv2.cvtColor(imagem, cv2.COLOR_BGR2HSV) # Definir os limites inferior e superior para o marrom (pode exigir ajustes) marrom_inferior = np.array([10, 50, 20]) marrom_superior = np.array([20, 255, 200]) # Definir os limites inferior e superior para o verde (pode exigir ajustes) verde_inferior = np.array([40, 40, 40]) verde_superior = np.array([80, 255, 255]) # Criar máscaras para identificar o marrom e o verde na imagem mascara_marrom = cv2.inRange(hsv, marrom_inferior, marrom_superior) mascara_verde = cv2.inRange(hsv, verde_inferior, verde_superior) # Encontrar os contornos das áreas de marrom e verde contornos_marrom, _ = cv2.findContours(mascara_marrom, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contornos_verde, _ = cv2.findContours(mascara_verde, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # Encontrar o contorno com a maior área (interseção entre marrom e verde) maior_contorno_marrom = max(contornos_marrom, key=cv2.contourArea) maior_contorno_verde = max(contornos_verde, key=cv2.contourArea) # Aproximar o contorno com uma curva poligonal para reduzir oscilações epsilon_marrom = 0.02 * cv2.arcLength(maior_contorno_marrom, True) aproximacao_marrom = cv2.approxPolyDP(maior_contorno_marrom, epsilon_marrom, True) epsilon_verde = 0.02 * cv2.arcLength(maior_contorno_verde, True) aproximacao_verde = cv2.approxPolyDP(maior_contorno_verde, epsilon_verde, True) # Calcular os pontos extremos da linha média entre os contornos pontos_marrom = np.squeeze(aproximacao_marrom) pontos_verde = np.squeeze(aproximacao_verde) # Encontrar os pontos extremos da linha média para a parte superior (verde) ponto_inicial_superior_verde = tuple(pontos_verde[pontos_verde[:, 1].argmin()]) ponto_final_superior_verde = tuple(pontos_verde[pontos_verde[:, 1].argmax()]) # Encontrar os pontos extremos da linha média para a parte inferior (verde) ponto_inicial_inferior_verde = tuple(pontos_marrom[pontos_marrom[:, 1].argmin()]) ponto_final_inferior_verde = tuple(pontos_marrom[pontos_marrom[:, 1].argmax()]) # Encontrar o ponto médio para exibir o texto no meio das linhas posicao_texto_superior = ((ponto_inicial_superior_verde[0] + ponto_final_superior_verde[0]) // 2, (ponto_inicial_superior_verde[1] + ponto_final_superior_verde[1]) // 2) posicao_texto_inferior = ((ponto_inicial_inferior_verde[0] + ponto_final_inferior_verde[0]) // 2, (ponto_inicial_inferior_verde[1] + ponto_final_inferior_verde[1]) // 2) # Desenhar as linhas médias entre os contornos (lado direito - verde) imagem_linha_media_verde = imagem.copy() cv2.line(imagem_linha_media_verde, ponto_inicial_superior_verde, ponto_final_superior_verde, (0, 0, 255), 2) cv2.line(imagem_linha_media_verde, ponto_inicial_inferior_verde, ponto_final_inferior_verde, (0, 0, 255), 2) # Adicionar os números 1 e 2 às linhas (no meio das linhas) com os símbolos de direção cv2.putText(imagem_linha_media_verde, '>1', posicao_texto_superior, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cv2.putText(imagem_linha_media_verde, '<2', posicao_texto_inferior, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # Mostrar a imagem com as linhas médias entre os contornos (lado direito - verde) cv2.imshow('Linhas Médias (Lado Direito - Verde)', imagem_linha_media_verde) cv2.waitKey(0) cv2.destroyAllWindows()