在执行ORB点特征提取时:报错
OpenCV Error: Assertion failed (!outImage.empty()) in drawKeypoints, file /home/ssf/Downloads/opencv-3.1.0/modules/features2d/src/draw.cpp, line 113
terminate called after throwing an instance of 'cv::Exception'
what(): /home/Downloads/opencv-3.1.0/modules/features2d/src/draw.cpp:113: error: (-215) !outImage.empty() in function drawKeypoints
解决办法:image放置的位置不对,放在可执行文件同文件夹下: ./fastFeatures
相应的程序代码进行调整,将图片文件位置重新存储;
/*imwrite("../../result/out00.jpg",keyPointImage);*/ ;其中../..返回上两级目录;
调整代码为: imwrite("out00.png",keyPointImage);
Mat srcImage = imread("img1.png");
以下是在程序代码调试过程中用到的查询的opencv函数drawKeypoints各参数定义:
opencv提供了一个快速绘制特征点的函数drawKeypoints:
一个参数image:原始图像,可以使三通道或单通道图像;
第二个参数keypoints:特征点向量,向量内每一个元素是一个KeyPoint对象,包含了特征点的各种属性信息;
第三个参数outImage:特征点绘制的画布图像,可以是原图像;
第四个参数color:绘制的特征点的颜色信息,默认绘制的是随机彩色;
第五个参数flags:特征点的绘制模式,其实就是设置特征点的那些信息需要绘制,那些不需要绘制,有以下几种模式可选:
DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量
NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制
DRAW_RICH_KEYPOINTS:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size,和方向,是最能显示特征的一种绘制方式。
drawKeypoints(srcImage,detectKeyPoint,keyPointImage,Scalar::all(-1),DrawMatchesFlags::DEFAULT);
fangzai bin wenjianjia yu kezhixing wenjian yiqi
./fastFeatures
另外,在程序运行的时候,可以检查一下CmakeLists.txt里opencv的版本号是否和本机的版本号相同,可以指定版本号,以免混淆:
CmakeLists.txt add:
find_package(OpenCV 3.3.1 REQUIRED)