59 lines
2.0 KiB
Python
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()
|