Я пробовал 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);
Я не могу найти причину, почему. Может кто-нибудь, пожалуйста, помогите мне здесь.
Спасибо
редактировать: это ошибка, которую я получаю, когда она ломается:
Необработанное исключение по адресу 0x007f0900 в SIFT.exe: 0xC0000005: место чтения нарушения прав доступа 0x00000000.
.
Моя установка: Microsoft Visual C++ 2010, OpenCV 2.4.2, Windows XP. Все библиотеки добавлены и связаны
NULL
, прежде чем вызыватьdetect()
- person Aurelius   schedule 31.10.2012imshow("meh", img);
и когда я его запускаю (после комментирования проблемной строки), он отображает изображение правильно. Следовательно, это читается. - person ipunished   schedule 31.10.2012