2

我正在尝试在goodFeatureToTrack()lena 的灰色图像上使用 opencv 2.4.3 的函数......但是我总是得到存储特征的向量的零大小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

编辑:在 Bob 的建议之后,我省略了掩码行并修改了函数..但是现在应用程序在调用 goodFeaturesToTrack 函数后挂断了......知道吗?

4

2 回答 2

2

通过将掩码设置为全零,您基本上将整个图像排除在搜索之外。您应该mask.setTo(Scalar::all(0));完全删除(从而将矩阵留空)或将其替换为mask.setTo(Scalar::all(1));(即在整个图像中搜索特征;否则,您应该在感兴趣的区域中将掩码设置为 1,否则设置为 0)。

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

在此处输入图像描述

于 2012-12-19T08:48:34.320 回答
0

刚刚解决了这个问题....而不是使用预构建库 n dll ....使用 MSVC2008 构建它,现在它工作正常...检测到 Bob 指出的相同点..

于 2012-12-19T16:04:39.543 回答