我试图跟踪通过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,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代表点数.
这应该工作.