OpenCV goodFeaturesToTrack 的状态为零

Posted

技术标签:

【中文标题】OpenCV goodFeaturesToTrack 的状态为零【英文标题】:OpenCV goodFeaturesToTrack's status are zeros 【发布时间】:2016-09-13 06:54:44 【问题描述】:

尝试使用 OpenCV 3.1 为 ios 实现光流。

我构建了如下代码所示的基本内容,我确实从 goodFeaturesToTrack 获得了 功能 点,但问题是 没有任何点被跟踪,并且 @ 987654322@ 结果始终为零(未成功跟踪)。

cv::Mat gray;         // current gray-level image
cv::Mat gray_prev;

std::vector<cv::Point2f> features;  // detected features
std::vector<cv::Point2f> newFeatures;

std::vector<uchar> status; // status of tracked features
std::vector<float> err;    // error in tracking
cv::TermCriteria _termcrit = cv::TermCriteria(cv::TermCriteria::COUNT|cv::TermCriteria::EPS,20,0.03);


-(void)processImage:(cv::Mat&)image 

    //-------------------- Optical Flow ---------------------

    cv::cvtColor(image, gray, CV_BGR2GRAY);

    if(gray_prev.empty()) 
        gray.copyTo(gray_prev);
    

    cv::goodFeaturesToTrack(gray, features, 20, 0.01, 10);
    cv::calcOpticalFlowPyrLK(gray_prev, gray, features, newFeatures, status, err,  cv::Size(10, 10), 3, _termcrit, 0, 0.001);

    // draw circles for features points
    for (int i = 0; i < features.size(); i++) 
        circle(image, features[i], 10, cv::Scalar(250,250,250));
    

    for (int y = 0; y < status.size(); y++) 
        NSLog(@"Status: %d", status[y]); // always zero
    

    std::swap(newFeatures, features);
    cv::swap(gray_prev, gray);

【问题讨论】:

您是否尝试更改质量级别参数? @Pierre 是的,没有任何改变。 【参考方案1】:

你应该打电话

cv::goodFeaturesToTrack(gray, features, 20, 0.01, 10);

仅用于功能列表的第一次初始化,而不是在每个循环中。 您所做的是重置特征列表以匹配每个周期的当前帧,因此特征中没有位移。

另外,如果你只想要两帧之间的位移,你应该调用

cv::goodFeaturesToTrack(**gray_prev**, features ....

【讨论】:

【参考方案2】:

状态在两种情况下为0:

特征在图像 roi 之外 lucas-kanade 窗口的梯度矩阵的最小特征值高于 minEigThreshold,即在您的窗口中没有足够的纹理。

但是,根据我的经验,状态标志是一个很好的猜测,但不是一个重要的标志,可以知道该功能是否已成功跟踪。

忽略状态并绘制或打印您的特征和新特征向量。如果它们相同,请检查 gray_prev 和 gray image 是否彼此不同。

【讨论】:

以上是关于OpenCV goodFeaturesToTrack 的状态为零的主要内容,如果未能解决你的问题,请参考以下文章

cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

opencv相机标定

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

如何使用opencv实现图像匹配

OpenCV 简介 携手走进 OpenCV 的世界

如何利用openCV函数查看opencv版本