在执行orb特征点提取过程中报错:OpenCV Error: Assertion failed (!outImage.empty()) in drawKeypoints

在执行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)

猜你喜欢

转载自blog.csdn.net/neptune4751/article/details/108987876
今日推荐