[英]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探测器输出的数据类型和尺寸,并确保我跟踪的点数属于同一类型。 它开玩笑了!
这是你需要知道的。
这应该工作。
我跟随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.