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

Use color image not grayscale, it works for me that way.
You could try skipping "const" too, if the color image would not work either.

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