1

私はオンライン リソースから SIFT/SURF を試していて、自分でテストしたいと思っていました。

私は最初に、このコードを使用してフリーでないライブラリなしで試しました:

int _tmain(int argc, _TCHAR* argv[])
{
Mat img = imread("c:\\car.jpg", 0);
Ptr<FeatureDetector> feature_detector = FeatureDetector::create("SIFT");
vector<KeyPoint> keypoints;

feature_detector->detect(img, keypoints);

Mat output;

drawKeypoints(img, keypoints, output, Scalar(255, 0, 0));

namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", output);
waitKey(0);



return 0;

}

ここで、段階的にデバッグを行うと、feature_detector->detect(img, keypoints);

次に、フリーではないライブラリを使用して、次のコードを試しました。

int main(int argc, char** argv) 
{
    const Mat input = cv::imread("/tmp/image.jpg", 0); //Load as grayscale

    SiftFeatureDetector detector;
    vector<KeyPoint> keypoints;
    detector.detect(input, keypoints);

    // Add results to image and save.
    Mat output;
    drawKeypoints(input, keypoints, output);
    imwrite("/tmp/SIFT_RESULT.jpg", output);

    return 0;

 }

これもエラーなしでコンパイルされますが、実行すると次のステップで中断します。detector.detect(input, keypoints);

理由がわかりません。誰かここで私を助けてくれませんか。

ありがとうございました

編集:これは、壊れたときに発生するエラーです:

SIFT.exe の 0x007f0900 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000。

.

私のセットアップ: Microsoft Visual C++ 2010、OpenCV 2.4.2、Windows XP。追加およびリンクされたすべてのライブラリ

4

1 に答える 1

1

グレースケールではなくカラー画像を使用してください。
カラー画像も機能しない場合は、「const」もスキップしてみてください。

const Mat input = cv::imread("/tmp/image.jpg");
于 2012-11-02T10:03:41.383 に答える