私はオンライン リソースから 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。追加およびリンクされたすべてのライブラリ