Detecte Rectangle Inside Polygne {Python}

asked 2019-06-18 07:12:02 -0500

Arruda gravatar image

updated 2019-06-18 07:30:51 -0500

Hi, I have an script that detect the Danger Area for pedrestrians and the pedrestrians, but i need to detect if the pedrestrians in inside of danger área.

My danger área is an polygone and the peoples detected is an box!

What is the best method to detect an box inside a polygone?

image description

Sample 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))
        overlay = img.copy()

        #Frame Detectação Red Zone
        vermelho_inicio = np.array([0, 9, 178])
        vermelho_fim = np.array([255, 40, 255])
        #Mascara de detecção do modelo de cor
        mask = cv2.inRange(img, vermelho_inicio, vermelho_fim)
        #Pontos e desenho do poligono (Objeto detectado no laser)
        np_points = np.transpose(np.nonzero(mask))
        points = np.fliplr(np_points) # opencv uses flipped x,y coordinates 
        approx = cv2.convexHull(points)
        DangerArea = cv2.fillPoly(img, [approx], (0,0,255))

        #Transparencia
        cv2.addWeighted(overlay,0.3,img,1-0.65,0,img);

        edges = cv2.Canny(mask,30,120)
        #DESENHO AS LINHAS NO LASER (Cone)        
        lines = cv2.HoughLinesP(edges, 5, np.pi/180, 30, maxLineGap=50)
        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), 1)     




        #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 / 2), int(height / 4))
        bottom_right = (int(width * 2 / 2), int(height * 3 / 4))
        #ESCREVO O RETANGULO NO CENTRO DO VÍDEO
        cv2.rectangle(img,(100,150), (200,250),(0,152,112),1);
        cv2.rectangle(img,(500,150), (420,250),(0,100,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
edit retag flag offensive close merge delete

Comments

peppinob gravatar imagepeppinob ( 2019-06-24 04:14:21 -0500 )edit