繁体   English   中英

OpenCV 光流断言

[英]OpenCV Optical Flow assertion

我正在尝试沿着通过 dsift 使用 python 2.7 和 openCV 2.4.11 获得的面部特征的轮廓跟踪地标。 我想在帧之间跟踪这些功能。

但是我收到以下错误。 我已经检查过输入图像是 1 通道等维(和无符号 8 位类型),同样与 prev 点:

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, tru
e)) >= 0) in cv::calcOpticalFlowPyrLK, file ..\..\..\modules\video\src\lkpyramid.cpp
cv2.error: ..\..\..\modules\video\src\lkpyramid.cpp:845: error: (-215) (npoints
= prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function cv::calcOpticalFlowP
yrLK

导致问题的线路:

new_pts, ttl, err = cv2.calcOpticalFlowPyrLK(self.old_img, i_img, i_old_pts, None)

有谁知道我可以从哪里开始调试这个?

当我进行基于光流的跟踪时,我遇到了同样的问题。 我尝试了很多不同的方法来解决这个问题。 但徒劳无功。

最后,有一个示例程序,他们使用shi-tomsi角点检测跟踪,这些点在LK算法中使用,并且它工作得很好。 所以我探讨了Shi-Tomsi探测器输出的数据类型和尺寸,并确保我跟踪的点数属于同一类型。 它开玩笑了!

这是你需要知道的。

  • 确保图像是灰度的。
  • 你的坐标参数i_old_pts应该是单精度浮点数,意思是float32。 这种类型可以使用numpy。 python中的float是float64
  • 坐标参数i_old_pts(来自你的程序)应该是一个numpy数组,其维度为(n,1,2),其中n代表点数。

这应该工作。

我跟随opencv样本的光流有同样的问题。 在我的情况下,问题是我正在阅读的视频文件的类型。 我是从mkv文件中读取的,但是没有用。

我不知道为什么,但是经过大量的代码评估和调试,我发现我的视频的第一帧(我从网络摄像头捕获的视频)是一个空的黑色图像。 所以,我使用了第二帧:

ret, prevframe = cap.read();
ret, prevframe = cap.read(); # the first frame was black and I was not sure why!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM