我正在用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)
我认为您不能使用OpticalFlow。我建议你调查一下KalmanFilter
。有了它,您可以从历史中跟踪、平滑和预测运动矢量。
好吧,我以前也做过。您将需要2帧。但是,如果提取一个子图像,其中包含前一个检测到的对象的4个角和当前帧中该车辆的4个角落,则可以更快地完成处理,矩形应尽可能小,并且在两个图像中都应匹配。之后,您可以应用光流功能:
cv::calcOpticalFlowFarneback(prvsRgle,currentRgle,flow, 0.5, 3, 5, 5, 7, 1.5, 0);
这里有一些有用的链接,你应该访问:1,2和我最喜欢的3