使用openCV将视频背景与初始帧中存在的感兴趣对象隔离



我使用OpenCV从交通摄像头定位移动的汽车。我正在制作的视频是从初始帧中感兴趣的物体开始的。我的问题是如何在没有任何车辆的情况下隔离背景,作为后续运动检测的原点框架。

camera = cv2.VideoCapture(video)
firstFrame = None
while True:
    (grabbed, frame) = camera.read()  
    if not grabbed:
        break
    frame = cv2.resize(frame, None, fx=2, fy=2)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (11,11), 0)
    if firstFrame is None:
        firstFrame = gray
        continue
    frameDelta = cv2.absdiff(firstFrame, gray)
    thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
    thresh = cv2.dilate(thresh, None, iterations=2)
    _, cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,   cv2.CHAIN_APPROX_SIMPLE)
    for c in cnts:
        if cv2.contourArea(c) < 500:
            continue
    (x,y,w,h) = cv2.boundingRect(c)
    cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)
    cv2.imshow('frame', frame)
    cv2.imshow('thresh', thresh)
    cv2.imshow('frame delta', frameDelta)
    if cv2.waitKey(0) & 0xFF == ord('q'):
        break
camera.release()
cv2.destroyAllWindows()

最终,第一帧将没有任何车辆,由视频的原始帧继续。

谢谢

要解决您所描述的问题,您应该更多地研究对象检测和分类。定位移动的汽车并不是一个特别的背景减法问题。在这里可以找到一个使用Haar级联的示例:https://github.com/andrewssobral/vehicle_detection_haarcascades

相关内容

  • 没有找到相关文章