Hi, I'm developing a script that detects 2 lines that are laser sketches on the floor,
example:
With the code below I can identify the lights and draw lines in the detection area:
vermelho_inicio = np.array([0, 9, 178]) #131,72,208 vermelho_fim = np.array([255, 60, 255]) mask = cv2.inRange(img, vermelho_inicio, vermelho_fim)
edges = cv2.Canny(mask, 100, 200)
#DESENHO AS LINHAS NO LASER (Cone)
lines = cv2.HoughLinesP(edges, 5, np.pi/180, 0, maxLineGap=100)
a,b,c = lines.shape
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 5)
And my result Is:
What I need?
I need to draw the area detected in red and get the positions x1, y1, x2, y2 of the drawn area. The result I hope is the result below or something close to that:
My Complet Code:
# -*- coding: utf-8 -*-
import numpy as np
import cv2
import time
import math
#STREAMINGS
#http://68.116.13.142:82/mjpg/video.mjpg INDUSTRIAL
#http://95.255.38.86:8080/mjpg/video.mjpg RUA ITALIA
#http://81.198.213.128:82/mjpg/video.mjpg CORREDOR MOVIMENTADO
class DetectorAPI:
cap = cv2.VideoCapture("VideoCone.MOV")
while True:
r, img = cap.read()
#DEFINE A ÁREA DO VIDEO EM QUE O MODELO IRA ATUAR
#img = img[10:1280, 230:1280]
img = cv2.resize(img, (800, 600))
#Frame Detectação Red Zone
#frame = cv2.GaussianBlur(img (5, 5), 0)
vermelho_inicio = np.array([0, 9, 178])
#131,72,208
vermelho_fim = np.array([255, 60, 255])
mask = cv2.inRange(img, vermelho_inicio, vermelho_fim)
edges = cv2.Canny(mask, 100, 200)
#DESENHO AS LINHAS NO LASER (Cone)
lines = cv2.HoughLinesP(edges, 5, np.pi/180, 0, maxLineGap=100)
a,b,c = lines.shape
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 5)
#Crio o overlay para fazer a transparência no quadrado da Danger Área
overlay = img.copy()
#DESENHO A DANGER ÁREA
#x1,y1 ------
#| |
#| |
#| |
#--------x2,y2
#CAPTURO AS INFORMAÇÕES DO FRAME
height, width, channels = img.shape
#DIVISÃO PARA CAPTURAR O CENTRO DA IMAGEM
upper_left = (int(width / 4), int(height / 4))
bottom_right = (int(width * 3 / 4), int(height * 3 / 4))
#ESCREVO O RETANGULO NO CENTRO DO VÍDEO
#DangerArea = cv2.rectangle(overlay,upper_left, bottom_right,(0,0,255),-1);
#Escrevo o texto na Danger Area
#cv2.putText(DangerArea,'Danger Area',(int(width / 4),int(height * 3 / 4)), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(255,255,255),2,cv2.LINE_AA)
#cv2.addWeighted(overlay,0.3,img,1-0.4,0,img);
#Imprimo no console o centro da imagem
print('Upper_Left: '+str(upper_left)+' bottom_right: '+str(bottom_right));
#Exibe o video
cv2.imshow("edges", edges)
cv2.imshow("Detectar Pessoas", img)
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break