关于opencv2的SiftFeatureDetector生成了一亿多keypoint

horsenohorse 2016-04-19 04:55:28
各位大神,我只是按照教学历程做一个简单的复制,可以编译通过,但每次都会在drawkeypoints这句上中断,查了一下,这时的keypoints向量总数有152896818个,请问这正常么(FAST算法也就生成几十个keypoints)。这个问题卡了我两天多了,求各位大神解决下,跪谢了。。。。。

中断描述如下:0x77c98d8f(ntdll.dll)处有未经处理的异常:0xc0000005:读取位置0x3d89299f使访问冲突。





具体简单代码如下:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>

using namespace std;
using namespace cv;
int main()
{


// 读入图像
cv::Mat image= cv::imread("try0.jpg",0);
cv::namedWindow("Original Image");
cv::imshow("Original Image", image);

// 特征点的向量
std::vector<cv::KeyPoint>keypoints;
// 构造SIFT特征检测器-
cv::SiftFeatureDetector sift;
// 检测SIFT特征值
sift.detect(image,keypoints);

// FastFeatureDetector fast(40);
// fast.detect(image,keypoints);

Mat featureImage=image.clone();

cv::drawKeypoints(image, // 原始图像
keypoints, // 特征点的向量
featureImage, // 生成图像
cv::Scalar(255,255,255), // 特征点的颜色
DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); // 标志位

cv::namedWindow("SIFT Features");
cv::imshow("SIFT Features",featureImage);
waitKey(0);
return 0;
}
...全文
935 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
劲草浅躬行 2016-06-12
  • 打赏
  • 举报
回复
这个有两种方法来改 1. 可能你的图片上面特征点太多,确实检测到过多的特征点,最后出错。改进方法就是把图片压缩,降低特征点的数量。 2. 第二种方法就是,这句 cv::SiftFeatureDetector sift; 改成 cv::SiftFeatureDetector sift(0,3,0.08,10.0)。其中第三个参数是控制筛选特征点的的阈值,默认值是0.03,我改到了0.08,你还可以用更大的数,这样的话特征点数量就会减小。第四个参数是控制边缘的阈值,也是越大,则特征点数量越小。
horsenohorse 2016-04-19
  • 打赏
  • 举报
回复
大家救救我。。。。。

4,246

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧