Pie*_*ter 5 c++ opencv opticalflow computer-vision
我正在尝试使用cv::calcOpticalFlowPyrLK但有时在该函数中的内部断言失败.断言是npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0.我正在使用OpenCV 2.3.1.此功能的源代码可在此处获得.
很难绕过他们的代码,特别是因为我对计算机图形学的经验有限以及缺乏评论.为什么这个断言被触发,它对我的问题说了些什么?
编辑:我调用该函数如下:
cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);
Run Code Online (Sandbox Code Playgroud)
我发现features通过cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);使用看似足够大且非常有效的图像的非空掩码调用而获得的向量不包含任何特征.怎么会发生这种情况?
curBwFrame

skinMask

我可以使用以下代码片段重现该问题:
#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;
}
Run Code Online (Sandbox Code Playgroud)
主要问题是你的参数。在OpenCV 2.3.2 文档中(2.3.1 之间没有兼容性变化),这是方法参数的描述:
\n\nvoid goodFeaturesToTrack(InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask=noArray(), int blockSize=3, bool useHarrisDetector=false, double k=0.04 )\nRun Code Online (Sandbox Code Playgroud)\n\n参数:
\n\n我建议您稍微调整一下qualityLevel 和minDistance 来满足您的需求。
\n| 归档时间: |
|
| 查看次数: |
11844 次 |
| 最近记录: |