2

私はgoodFeatureToTrack()レナのグレー画像でopencv2.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

編集:後のボブの提案私はマスクの行を省略して関数を変更しました..しかし今、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

ビルド前のlibsndllを使用する代わりに、今すぐ問題を解決しました。MSVC2008でビルドすると、正常に動作します。ボブが示したのと同じポイントが検出されます。

于 2012-12-19T16:04:39.543 に答える