如何使用光流和运动矢量跟踪或预测已经找到的轮廓的路径?

时间:2015-12-14 15:21:04

标签: python opencv

我在OpenCV python中编写一个项目。它基本上是一个交通监控的最后一年项目..现在我已编码到目前为止,它运行时识别视频中的车辆,并在这些车辆上绘制矩形和质心。现在我想要做的是绘制运动矢量或仅跟踪上面找到的轮廓,即车辆。在opencv光流功能中,我无法确定这种情况下的参数。任何人都可以帮助我吗?谢谢..这是代码的轮廓查找部分..

image, contours, hierarchy = cv2.findContours(fgmask.copy(), cv2.RETR_EXTERNAL,
                                       cv2.CHAIN_APPROX_NONE)
    try: hierarchy = hierarchy[0]
    except: hierarchy = []


    #Drawing Rectangles arround contours (Vehicles)
    for contour, hier in zip(contours, hierarchy):
        (x,y,w,h) = cv2.boundingRect(contour)
        if w > 8 and h > 8:

            cv2.rectangle(frame, (x,y), (x+w,y+h), (255, 0, 0), 2)

2 个答案:

答案 0 :(得分:0)

我不认为你可以使用OpticalFlow来做到这一点。我会想你看看KalmanFilter。通过它,您可以跟踪,平滑和预测历史中的运动矢量。

答案 1 :(得分:0)

好吧,我以前做过。你需要2帧。但是,如果您提取包含前一个检测到的对象的4个角和当前帧中该车辆的4个角的子图像,则可以更快地完成您的过程,矩形应该尽可能小,并且它应该在两者中都匹配图片。之后,您可以应用光流功能:

cv::calcOpticalFlowFarneback(prvsRgle,currentRgle,flow, 0.5, 3, 5, 5, 7, 1.5, 0);

以下是一些您应该访问的有用链接:12和我最喜欢的3