我正在尝试使用cv::calcOpticalFlowPyrLK
,但有时该函数中的内部断言会失败。断言是npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0
。我正在使用 OpenCV 2.3.1。此函数的源代码可在此处获得。
我很难理解他们的代码,尤其是因为我在计算机图形方面的经验有限并且他们缺乏评论。为什么会触发此断言,它对我的问题有什么看法?
编辑:我调用函数如下:
cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);
我发现通过使用看起来足够大和有效图像的非空掩码features
调用获得的向量cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
不包含任何特征。这怎么可能发生?
curBwFrame
皮肤面膜
我可以使用以下代码片段重现该问题:
#include <vector>
#include <cassert>
#include <opencv2\opencv.hpp>
using std::vector;
using namespace cv;
int main() {
vector<Point2f> features;
cv::Mat curBwFrame = imread("curBwFrame.png");
cv::cvtColor(curBwFrame, curBwFrame, CV_RGB2GRAY);
imwrite("test.png", curBwFrame);
cv::Mat skinMask = imread("skinMask.png");
cv::cvtColor(skinMask, skinMask, CV_RGB2GRAY);
imwrite("test.png", skinMask);
cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
assert(features.size() > 0);
return 0;
}