我在Windows 8.1中使用OpenCV 2.4.9和Microsoft Visual Studio Community 2013来实现使用SURF进行特征提取。 在调试时,我收到此消息:“Debug Assertation Failed。表达式:无效的空指针”除了命令行不执行任何参数,因为readme()函数执行。我是opencv的新手,因此使用了opencv 2.4.9教程中的代码。请帮忙解决这个问题
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;
void readme();
/** @function main */
int main(int argc, char** argv)
{
if (argc != 3)
{
readme();
}
Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
Mat img_2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE);
if (!img_1.data || !img_2.data)
{
std::cout << " --(!) Error reading images " << std::endl; return -1;
}
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector(minHessian);
std::vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect(img_1, keypoints_1);
detector.detect(img_2, keypoints_2);
//-- Draw keypoints
Mat img_keypoints_1; Mat img_keypoints_2;
drawKeypoints(img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
drawKeypoints(img_2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
//-- Show detected (drawn) keypoints
imshow("Keypoints 1", img_keypoints_1);
imshow("Keypoints 2", img_keypoints_2);
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{
std::cout << " Usage: ./SURF_detector <img1> <img2>" << std::endl;
}