Разделение ограничивающих рамок - PullRequest
0 голосов
/ 25 июня 2018

В этой проблеме мы пытаемся обнаружить людей в видео WEBCAM в РЕАЛЬНОМ ВРЕМЕНИ. Код работает нормально для 1 человека, но когда вводится более одного человека, код с треском проваливается. Вот код: -

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

kernel = np.ones((5,5), np.uint8)

background = None
while True:
    ret,frame = cap.read()
    gray = frame.copy()
    gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (11,11), 0)

    if background is None:
        background = gray
        continue

    delta = cv2.absdiff(background, gray)
    thresh = cv2.threshold(delta, 5, 255, 
    cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

    thresh = cv2.dilate(thresh, kernel, iterations=2)
    _,contours,hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, 
    cv2.CHAIN_APPROX_SIMPLE)

    if(len(contours)==0):
        continue

    #areas = [cv2.contourArea(c) for c in contours]
    #max_index = np.argmax(areas)
    #cnt=contours[max_index]

    #(x,y,w,h) = cv2.boundingRect(cnt)

    #if(1.0*(w*h)/(640*480)<0.75):
        #cv2.rectangle(frame, (x,y), (x+w,y+h), (0,0,255), 3)
        #print("Area: ",w*h)

    for i in range(len(contours)):
        (x,y,w,h) = cv2.boundingRect(contours[i])
        if(w*h<=90000):
            cv2.rectangle(frame, (x,y), (x+w,y+h), (0,0,255), 5)

    #cv2.imshow('thresh', thresh)

    cv2.imshow('frame', frame)
    if cv2.waitKey(1)==27:
        break

cap.release()
cv2.destroyAllWindows()

Я думаю, что проблема в том, что код не может отделить различные контуры разных обнаруженных людей, но я, возможно, не единственная причина. Кто-нибудь может мне помочь?

...