goodFeaturesToTrack给出零大小的向量

时间:2012-12-19 02:00:28

标签: opencv stl

我试图在lena的灰色图像上使用opencv 2.4.3的goodFeatureToTrack()函数...但是我总是得到一个零大小的向量存储功能为cv::Point2f ..我尝试过使用零掩码但是在这种情况下应用程序挂断了......我尝试使用0.01到0.001的质量等级值。然而,矢量的大小仍为零..任何想法?...以下是我的代码..

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/video/tracking.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{
    Mat frameROI;
    frameROI = imread("C:\\lena.jpg");
    std::vector<cv::Point2f> corners;
    cvtColor(frameROI,frameROI,CV_RGB2GRAY);

    //Mat mask(frameROI.size(), CV_8UC1);
    //mask.setTo(Scalar::all(0));

    //goodFeaturesToTrack(frameROI,corners,10,0.001,10,mask,3,false,0.04);
    goodFeaturesToTrack(frameROI,corners,10,0.001,10);//AFTER EDIT
    cout<<"SIZE OF FEATURE VECTOR = "<<corners.size()<<endl;

    imshow("VIDEO ROI",frameROI);
    waitKey();

    return 0;
}

输出:

SIZE OF FEATURE VECTOR = 0

编辑: afte Bob的建议我省略了掩码行并修改了函数..但现在应用程序在调用goodFeaturesToTrack函数后挂起......有什么想法吗?

2 个答案:

答案 0 :(得分:2)

通过将蒙版设置为全零,基本上可以从搜索中排除整个图像。你应该完全删除mask.setTo(Scalar::all(0));(因此将矩阵留空)或用mask.setTo(Scalar::all(1));替换它(也就是说,搜索整个图像中的特征;否则,你应该在1中设置掩码。感兴趣的区域,否则为0。

如果我完全删除mask.setTo(Scalar::all(0));并绘制点数,那么下面的图片就是您的代码为我返回的内容:

enter image description here

答案 1 :(得分:0)

刚刚解决了问题....而不是使用pre build libs n dlls ....使用MSVC2008构建它,现在它正常工作......检测到Bob指示的相同点...