69 lines
3.5 KiB
Python
69 lines
3.5 KiB
Python
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()
|