我一直在尝试从在线资源中获取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。所有 库添加并链接
答案 0 :(得分:0)
使用彩色图像而不是灰度,它对我有用。
如果彩色图像不起作用,你也可以尝试跳过“const”。
const Mat input = cv::imread("/tmp/image.jpg");