Определить, если набор пикселей пересекает границу ограничительной рамки - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь выполнить обнаружение мусорных клопов на шоссе, и для этого я хочу сначала обнаружить автомобили, а затем, если обнаружен набор пикселей, пересекающих границу ограничивающего прямоугольника, он должен быть помечен как мусор,Но я не знаю, как это обнаружить, когда объект (набор пикселей) пересекает ограничивающую рамку в OpenCV.

import cv2
import numpy as np

cap = cv2.VideoCapture('CarsDrivingUnderBridge.mp4')
fgbg =  cv2.bgsegm.createBackgroundSubtractorMOG()

while True:
    ret,frame = cap.read()
    fgmask = fgbg.apply(frame)

    if not ret:
        break 
    frame_r = cv2.resize(frame, (640, 480))
    fgmask_r = cv2.resize(fgmask, (640, 480))


    contours,h = cv2.findContours(fgmask_r, cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_SIMPLE)
    # contours,h = cv2.findContours(fgmask_r, cv2.RETR_TREE , cv2.CHAIN_APPROX_SIMPLE)

    for cnt in contours:
        area = cv2.contourArea(cnt)
        # print (area)
        if area <100:
            continue
        x,y,w,h = cv2.boundingRect(cnt)
        offset = 3    
        cv2.rectangle(frame_r,(x-offset,y-offset),(x+w+offset,y+h+offset),(0,255,0),2)


    cv2.imshow('Origional', frame_r)
    cv2.imshow('fg', fgmask_r)


    if cv2.waitKey(75) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

image description

1 Ответ

1 голос
/ 08 октября 2019

Выполните следующие действия:

  • Нарисуйте белую ограничивающую рамку на черном изображении.
  • Сделайте «побитовый» и между изображением ограничительной рамки и изображением объекта(A): overlap = cv.bitwise_and(bbox, A).
  • Подсчитать количество пикселей, которые перекрываются: cv.countNonZero(overlap). Если есть, то это обнаружено.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...