agrobot_base/Python/street-follower/identificador-rua.py

63 lines
2.1 KiB
Python

import cv2
import numpy as np
# Função para processar cada frame do vídeo
def processar_frame(frame):
# Convertendo para escala de cinza
cinza = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Limiarização para criar uma imagem binária
_, binarizada = cv2.threshold(cinza, 128, 255, cv2.THRESH_BINARY_INV)
# Encontrar os contornos
contornos, _ = cv2.findContours(binarizada, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Supondo que o maior contorno seja o caminho
if contornos:
maior_contorno = max(contornos, key=cv2.contourArea)
# Encontrar retângulo delimitador para o maior contorno
x, y, w, h = cv2.boundingRect(maior_contorno)
# Calcular distância das bordas
largura_frame = frame.shape[1]
distancia_esquerda = x
distancia_direita = largura_frame - (x + w)
# Desenhar um retângulo ao redor do caminho detectado e linhas das bordas
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.line(frame, (x, 0), (x, frame.shape[0]), (255, 0, 0), 2)
cv2.line(frame, (x + w, 0), (x + w, frame.shape[0]), (255, 0, 0), 2)
return frame, distancia_esquerda, distancia_direita
else:
return frame, None, None
# Inicializando a captura de vídeo
cap = cv2.VideoCapture(1) # Use 0 para a câmera padrão do seu sistema
try:
while True:
# Capturando frame a frame
ret, frame = cap.read()
if not ret:
print("Falha ao capturar imagem da câmera")
break
# Processar o frame atual
frame_processado, distancia_esq, distancia_dir = processar_frame(frame)
if distancia_esq is not None and distancia_dir is not None:
print(f"Distância da borda esquerda: {distancia_esq} pixels")
print(f"Distância da borda direita: {distancia_dir} pixels")
# Exibir o frame processado
cv2.imshow('Frame Processado', frame_processado)
# Pressione 'q' para sair do loop
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
# Quando tudo estiver feito, liberar a captura
cap.release()
cv2.destroyAllWindows()