VS2017下opencv_4.0.1使用SIFT算法时为何总是在detect函数(detectAndCompute也是)处报内存错误? 5C

环境:

  • windows
  • vistual studio2017
  • opencv_4.0.1

前提:

  • 已配置过opencv_contrib-4.0.1
  • 使用 debug ✖64

问题描述:

总是在detect(detectAndCompute也是)这个函数位置处出现错误:

0x00007FFB87B3A388 处(位于 image.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000001D36F1E9F0 处。

代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <vector>

using namespace std;
using namespace cv;
using namespace xfeatures2d;
using namespace cv::xfeatures2d;

int main()
{
    //Feature2D siftfd;
    SIFT siftfd;
    //Ptr<SIFT> siftfd = SIFT::create();
    //SiftFeatureDetector  siftfd;
    //sift s;
    //s.create();
    Mat image1 = imread("car1.jpg");
    Mat image2 = imread("car2.jpg");
    namedWindow("car1_before", WINDOW_FREERATIO);
    namedWindow("car2_before", WINDOW_FREERATIO);
    imshow("car1_before", image1);
    imshow("car2_before", image2);

    //ptr<siftfeaturedetector> siftfd = siftfeaturedetector::create();
    //ptr<sift> siftfd = sift::create();
    //feature2d siftfd;
    //vector<KeyPoint>kp1, kp2; //keypoint类型的容器
    vector<KeyPoint>kp1;
    Mat draw;
    //kp1.resize(100);
    //kp2.resize(100);

    //siftfd.detectAndCompute(image1, Mat(), kp1, draw);
    siftfd.detect(image1, kp1);
    Mat outimage1;
    drawKeypoints(image1, kp1, outimage1);
    namedWindow("car1_after", WINDOW_FREERATIO);
    imshow("car1_after", outimage1);

    waitKey();
    return 0;

报错情况:
图片说明

c++
0
qq_30066451
EricaZZ 同样遇见了这个错误,会不会是图像格式的问题呢
大约一个月之前 回复
qq_34288186
炘辰 您好,我也有一样的问题,请问您解决了这个问题了吗
2 个月之前 回复

2个回答

1
qq_30066451
EricaZZ 根据这个回答把问题解决了。
大约一个月之前 回复

忘记回来看这个问题了,这个我解决了,具体做什么解决的忘记了,现在能运行的代码如下:

#include <iostream>
#include <vector>
#include <opencv.hpp>
#include <core/core.hpp>
#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>
#include <xfeatures2d.hpp>
#include <xfeatures2d/nonfree.hpp>
#include <features2d/features2d.hpp>
#include <calib3d/calib3d.hpp>
#include <stitching/detail/seam_finders.hpp>

using namespace std;
using namespace cv;
using namespace xfeatures2d;
using namespace cv::xfeatures2d;
using namespace cv::detail;

int main()
{
    //Feature2D detector;
    //SIFT detector;
    //SiftFeatureDetector  detector;
    Ptr <SIFT> detector = SIFT::create();
    //Ptr <Feature2D> detector = Feature2D::create();
    //Ptr<SiftFeatureDetector> detector = SiftFeatureDetector::create();

    const char* imagename1 = "E1.jpg";
    const char* imagename2 = "E2.jpg";
    Mat image1 = imread(imagename1);
    Mat image2 = imread(imagename2);

    if (image1.empty())
    {
        cout << "Can not load image: ";
        cout << imagename1 << endl;
        return -1;
    }
    if (image2.empty())
    {
        cout << "Can not load image: ";
        cout << imagename2 << endl;
        return -1;
    }

    namedWindow("image1_before", WINDOW_FREERATIO);
    namedWindow("image2_before", WINDOW_FREERATIO);
    imshow("image1_before", image1);
    imshow("image2_before", image2);

    vector <KeyPoint> kp1, kp2; 
    Mat descriptor1, descriptor2;

    detector->detectAndCompute(image1, noArray(), kp1, descriptor1);
    detector->detectAndCompute(image2, noArray(), kp2, descriptor2);

    Mat outimage1;
    Mat outimage2;
    drawKeypoints(image1, kp1, outimage1);
    drawKeypoints(image2, kp2, outimage2);
    namedWindow("image1_after", WINDOW_FREERATIO);
    namedWindow("image2_after", WINDOW_FREERATIO);
    imshow("image1_after", outimage1);
    imshow("image2_after", outimage2);

    waitKey();
    return 0;
}

评论中提出的可能是图像的原因我觉得也有可能,太大的图片不行,这里我用的两张图片都是433×577大小的

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于opencv3.4+VS2015运行SIFT特征匹配detectAndCompute()函数莫名中断问题
最近在学习关于图像匹配拼接部分内容,在学习SIFT特征匹配方法时,本来想着先尝试着用opencv整合后的features2d类来创建一个生成特征点的简单小程序,然而却是在关键函数detectAndCompute()处遇到了麻烦,无论怎么s调试,最后都会导致内存问题,导致程序中断。具体代码如下#include &amp;lt;stdio.h&amp;gt;  #include &amp;lt;iostream&amp;gt; #i...
飘逸的python - 使用图像匹配SIFT算法进行LOGO检测
先上效果图.
OpenCV SITF 特征提取 FeatureDetector对象函数detect运行报错解决方案
本人在使用OpenCV SIFT特征提取算法时,遇到了问题,具体表现为 .exe触发了一个断点错误,经网上查找,发现是 vector 在析构时,造成了内存错误,解决方案由大神在csdn博客中给出,链接地址: 点击打开链接 按照大神所提示的 ,在使用opencv 函数之前,先对 vector 进行手动分配内存,分配内存后问题解决; 个人声明:本人在VS2013下调用sift算法,已经将问题
OpenCV学习笔记-SIFT
一、原理参考大神的博客,介绍的非常详细SIFT算法详解二、函数介绍opencv 3.x中的部分函数有改变:SIFT、SURF等都在cv.xfeatures2d模块中函数sift.detect()可以在图像中找到关键点。如果想在图像中的一个区域搜索的话,可以创建一个掩模图像作为参数使用。返回的关键点是个带有很多不同属性的特殊结构体,这些属性如下:pt:    表示图像中关键点的X坐标和Y坐标size...
opencv-python 提取sift特征并匹配
# -*- coding: utf-8 -*- import cv2 import numpy as np from find_obj import filter_matches,explore_match from matplotlib import pyplot as plt def getSift(): ''' 得到并查看sift特征 ''' img_pat
opencv提取surf特征点出现的错误
opencv实现surf特征的提取,本来是一个很简单的代码,结果我运行时却出现了各种错误,下面来谈谈我出现的错误及问题的解决过程。 首先,我把提取surf特征的过程整合成了一个函数,我单独建立一个工程读取两张图片,然后调用这个surf提取的函数时时无论是debug还是release模式下都是没有问题的,当我把这个函数添加到我现在已有的工程代码里面的时候出现了各种奇葩错误。下面是我surf特征提取
opencv3.1 SURF特征点算法说明与示例
本文转载自:http://livezingy.com/opencv3-1-surf/   SURF (Speeded Up Robust Features)是一种具有鲁棒性的局部特征检测算法。CSDN的博主zhaocj写的Opencv2.4.9源码分析——SURF对SURF算法分析的非常透彻,建议想学习SURF算法原理的同学去研读。本文从应用角度来记录SURF算法,并给出相应的范例。
Opencv3.4中使用SURF等算法使用错误的解决方法
    折腾这么一天天终于能用了,在linux装这些库太复杂了,可能是自己不了解的缘故吧。安装opencv-contrib下载3.4版本的opencv-contrib,具体的配置我参照了这篇文章,遇到的问题是经常cmake成功但是在make的环节报错,百度之后发现和gcc的版本有一定的关系,所以选择把PRECOMPILED_HEADERS设置成OFF进行cmake。cmake -D CMAKE_B...
(四)OpenCV中的特征检测之SIFT(尺度不变换特征)
注释:本文翻译自OpenCV3.0.0 document-&amp;gt;OpenCV-Python Tutorials,包括对原文档种错误代码的纠正1.目标学习SIFT算法的概念学习如何找到SIFT关键点和描述符2.理论在最后几章,我们看到了一些角落探测器,如Harris Corner等。它们是旋转不变的,这意味着,即使图像旋转,我们也可以找到相同的角落。这是显而易见的,因为角落在旋转中也是角落。但是缩...
VS中调用imshow报内存出错解决办法
把读取图片的相对路径改成绝对路径就可以了。
opencv3中SIFT配合暴力匹配进行关键点描述和提取
#include #include #include using namespace cv; using namespace std; int main() { Mat srcImage = imread("mofang1.jpg"); imshow("【原图】", srcImage); //对BGR空间的图像直接进行计算很费时间,所以,需要转换为灰度图 Mat srcGrayIma
图像拼接源码分析向:Opencv 4.0.0 源码分析——Stitching(一)之 SIFT
stitching系列是我在看过zhaocj(https://blog.csdn.net/zhaocj/article/details/78798687)大佬的这一系列之后,决定向其学习,更新一版属于我自己的Opencv 4.0.0版本的Stitching系列。 本人是图像拼接领域的小白,讲述过程中如有不对,希望大家批评指正。 本次主题——特征点提取 1.1 原理 参考我的github:h...
opencv3.4.0中使用SIFT算法
        自Opencv2以来的众多著名的特征检测算子(如SIFT,SURF,ORB算子等)所依赖的稳定版的特征检测与匹配相关的核心源代码已经从官方发行的Opencv3中移除,而转移到了一个名为xfeature2d的第三方库当中。         最近在学习特征识别,因为自己使用的是opencv3.4.0,便使用不了原来opencv2的代码实现特征提取方法。在网上找了各种方法,自己反正是没...
Emgucv SURF特征点的寻找和匹配
使用SURF类和其相关的函数需要添加Emgu.CV.Features2D和Emgu.CV.XFeatures2D这两个命名空间,同时也可以使用cuda模块来进行加速,由于使用Cuda需要安装,但Cuda目前支持的显卡驱动并不兼容win10,所以这里我就简单的说一下通用的方法吧。 这个代码里使用了UMat,UMat应该算是3.0版本中的新特性,根据官方的说法,UMat等价于Opencv中的Mat。具
Opencv学习笔记(二)———Opencv3中ORB算法的使用
相信很多小伙伴在使用ORB算法的时候,一般会从网上搜一些代码作为参考,那么问题来了:在好多ORB程序中都会这么写: ORB orb;如果你使用的是Opencv3的版本,编译器就会报错:ORB是一个纯虚类,无法进行实例化。但在opencv2的版本中可以正常使用。这是为什么呢?于是乎就在opencv3官方的Documents中寻找答案,ORB属于features2d模块中。在它的文档中终于发现了原
Surf特征点检测
1,特征点检测 首先需要定义一个SurfFeaturedector(SURF)特征检测类对象 /*定义SURF中的hessian阈值特征点检测算子  定义一个SurfFeatureDetector(SURF) 特征检测类对象 vector模板类是能够存放任意类型的动态数组,能够增加和压缩数据 */         int minHessian = 400; SurfFea
matlab sift算法使用的记录
最近在做个三维建模的东西,用到了sift算子,需要在matlab上使用。网上介绍使用了David Lowe的源代码。源码地址为:http://www.cs.ubc.ca/~lowe/keypoints/ 在使用的过程中,会出现以下错误:不知道是为什么,在一片博客中看到图像大小大致要800*600的说明,我就猜想是不是因为我的图像太大了。原始图像3000*1200的,于是我就把图像裁剪了一下下,大小...
opencv3.1的SIFT特征检测参数图文详解
本文转载自:http://livezingy.com/sift-in-opencv3-1/  SIFT算法的实现过程大致如下:对源图像进行高斯模糊处理,根据源图尺寸和相关设定参数生成图像的高斯金字塔和高斯差分金字塔(DOG尺度空间),在DOG尺度空间中搜索特征点,计算尺度,构建特征描述子。本文以SIFT的参数为主线来尝试说明SIFT算法的原理。       SIFT算法图像匹配的效
opencv 中sift 的使用
opencv 中Algorithm 封装了很多算法,实验过程中,发现sift,surf等在nonfree模块中的代码,需要initModule_nonfree();来注册算法,不然create 会返回空指针,这在opencv文档中有讲。 Ptr sift = Algorithm::create("Feature2D.FAST"); 对于上面这样的代码虽然可以通过编译,但是没有意义,因为
OpenCV2学习笔记(十二):特征提取算法SIFT与SURF
当尝试在不同图像之间进行特征匹配时,通常会遇到图像的大小、方向等参数发生改变的问题,简而言之,就是尺度变化的问题。每幅图像在拍摄时与目标物体的距离是不同的,因此要识别的目标物体在图像中自然会存在不同的尺寸。因此,计算机视觉中引入尺度不变的特征,主要的思想是每个检测到的特征点都伴随对应的尺度因子。特征提取算法SIFT与SURF算法是两种著名的特征点检测算法。
【OpenCV学习笔记 019】SIFT和SURF算法实现目标检测
SIFT特征提取
简易三维重建(二) SIFT提取特征向量
一,SIFT 函数接口     OpenCV中的SIFT函数主要有两个接口。 构造函数: [cpp] view plain copy SIFT::SIFT(int nfeatures=0, int nOctaveLayers=3, double contrastThreshold=0.04, double edgeThreshold=   10,
[VS+OpenCV] 程序运行过程正常,当跳出函数是出现断言错误
问题描述在VS2015下配置好Opencv后,成勋在函数运行过程中正常,调试时发现,当运行至跳出函数是,出现断言错误。如图 原因分析单步跟踪调试发现,在函数结束时会进行vector的析构,出现了析构错误。并且,如果vector在定义完成之后,进行resize或reserve操作,将vector空间做大,问题消失。后来查阅资料,结合亲身测试,发现是在调用Opencv 库时,由于opencv库编译使用的
OpenCV的SIFT特征点提取及RANSAC去除误检测
关于SIFT的讲解,参考:http://blog.csdn.net/zddblog/article/details/7521424关于SANCAS的讲解,参考:http://blog.csdn.net/laobai1015/article/details/51682596SIFT(Scale Invariant Feature Transform)多尺度特征点提取算法在nonfree文件内集成。R...
OpenCV 匹配兴趣点:SIFT、SURF 和二值描述子
上一篇文章中讲到如何检测图像中的兴趣点,以便后续的局部图像分析。为了进行基于兴趣点的图像分析,我们需要构建多种表征方式,精确地描述每个关键点。这些描述子通常是二值类型、整数型或浮点数型组成的向量。好的描述子要具有足够的独特性和鲁棒性,能唯一地表示图像中的每个特征点,并且在亮度和视角变化时仍能提取出同一批点集。此外,尽量能够简洁,以减少计算资源的占用。 ...
SIFT-GPU关于SaveSIFT函数的改进
SIFT-GPU是一个高效的进行SIFT特征提取和匹配的工具,是目前我用过的速度最快的工具。网址如下:http://www.cs.unc.edu/~ccwu/siftgpu/#lowesift 我在用SIFT-GPU进行SIFT特征提取的过程中,发现运行的速度比较慢,通过对运行的代码的时间分析,发现主要元凶是保存SIFT特征的函数SaveSIFT占用了大量的时间(包括匹配的时间,save的时间大约
调用opencv的detectMultiScale函数时报错
我拿detectMultiScale()函数来进行我指定训练好的类别检测时,发现程序会异常,跳转到free.c文件里去,如果把这句屏蔽掉就没有,我知道问题出在这里了,可是怎么调用强大的opencv会有这样的问题呢,怎么会怎么会??? 因为我改写了detectMultiScale()函数,加了mask,没有涉及到内存的问题啊,后来在网上搜,发现也有人碰到,http://www.aichengxu.
SIFT matlab code feature detection
SIFT feature detect , computer vision Matlab code 计算机视觉 SIFT算法
【CV】ORB源码详解-描述子的建立
【CV】ORB源码详解-描述子的建立 项目中最近需要在嵌入式上实现orb,由于板子的运算器对之没有优化,所以不能用opencv的代码。为了实现这个需求笔者查阅相关资料,阅读opencv3.2中相关的源码(很幸运能看懂),在此进行总结,以备使用。
Python2.7下opencv3.X版本不能使用sift,surf算法问题解决
问题没解决前环境配置:Anaconda2(Python 2.7.15)、opencv3.20 问题1:AttributeError: 'module' object has no attribute 'SIFT'或'SURF' 原因:opencv3.x将SIFT等算法整合到xfeatures2d集合里面了 解决:sift = cv2.SIFT() 更写成:sift = cv2.xfe...
python+OpenCV 特征点检测
1.Harris角点检测Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。基本原理是根据公式: 化简为求解矩阵,最后根据矩阵的特征值判断是否为角点 实现效果: 代码(不用OpenCV): # -*- coding: utf-8 -*- from pylab import
对SIFT算法的理解,尤其是尺度不变性
SIFT算法原理 待更。。。 怎样做到尺度不变性 怎样做到旋转不变性 怎样做到光照不变性 怎样做到仿射不变性
利用opencv2.4.10+VS2012和RobHess的sift特征算法实现全景图像拼接
利用opencv2.4.10+VS2012和RobHess的sift特征算法实现全景图像拼接
使用itoa错误
0x0F44460A (msvcr120d.dll) (MyPaint.exe 中)处有未经处理的异常:  0xC0000005:  写入位置 0x00C50BA4 时发生访问冲突。 TCHAR * T= TEXT(""); 这个错误会跳到xtoa.c这个文件,然后再这一行出现指针出错。另外itoa会出现警告(声明为否决的),这个是为什么呢,现在的C++版本应该使用什么函数代替呢?
SIFT算法:KeyPoint找寻、定位与优化
SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻、定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 【注】未经允许,本博客所有文章不得用于任何商业用途。转载请注明出处http://www.cnblogs.com/JiePro/ 目录: 1、找寻 2、定位 3、优化
SIFT(2)——MATLAB实现SIFT详解
这篇博客主要把SIFT通过MATLAB进行可视化,真正的SIFT算法在C源码里,下一篇论文(如果我能看懂的话)详细讲C源码,也就是下面提到的siftWin32.exe,作者把SIFT给写成.exe了。 个别名词解释: key:SIFT算法识别出的每个image中的关键点。 首先,执行[image, descriptors, locs] = sift(imageFile),求出每个key的长度为...
SIFT代码V1版本(Matlab)实现以及思考的问题
    写在前面的话:根据网络上的资料整理学习了一下SIFT的原理,并且完成了代码实现。除了高斯滤波矩阵求逆这样的自带函数以外几乎所有的函数都是自己编写实现的。这里要非常感谢网络上的各位提供的资料,尤其是:https://blog.csdn.net/zhaocj/article/details/42124473,这是他的原话“可以在线阅读,也可以免费下载(在这里,鄙视那些设置下载权限和积分的人!!...
Matlab遇到内存不足(Out of memory)的解决办法
使用机器: CPU  (英特尔)Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(2801 MHz) 内存  8.00 GB (   2400 MHz) 主硬盘  1000 GB (希捷 ST1000LM035-1RK172 ) 显卡  NVIDIA GeForce GTX 1050 Ti 在做图像拼接的过程中我需要把九张2160×3860×3的图像拼起来。因为...
利用RobHess源码实现SIFT算法及RANSAC去错的图像特征提取匹配及去除错匹配
本文是在VS2010+Opencv2.4.9环境下实现! 首先下载RobHess利用opencv实现SIFT算法源码,在配置好opencv环境的vs2010中实现SIFT特征提取、匹配,在利用K-D树、BBF和RANSAC去除错误匹配,实验结果如图: 去除错误匹配前结果: 去除错误匹配后结果: 下面详细介绍如何在自己的开发环境中实现利用RobHess源码: 1、在VS2010中新建自己的
计算机视觉SIFT算子OPENCV3.0详细实现(未调用opencv和sift相关的函数)
利用opencv3.0详细实现sift算子(未调用opencv3.0和sift相关的函数),该文档自带两张图片可以测试。本人亲测效果很好。还有一个生成的exe文件可以直接使用验证。
文章热词 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 vs2017制作网页视频 java 为何要学习反射

相似问题

2
VS2017下opencv_4.0.1使用SIFT算法时为何总是在detect函数(detectAndCompute也是)处报内存错误?
3
怎样定义两个函数,并在主函数中输出结果,下面代码有什么错误
1
利用指针写一函数,实现一长字符串中两短字符串交换,从主函数输入待替换的长字符串以及替换前后两个子串?
5
求问一下为什么C++中在类的成员函数中使用switch语句对enum类型做分支选择时会提示请输入标识符?
0
opencv4.0配置vs2017无法 显示图片
2
QT编程时用代码编程添加了一个textEdit运行时报错说没有这个成员怎么办,求大佬解答
3
大佬们看看为什么move这个函数没有执行呢,谢谢!
1
PTAL1-049 天梯赛座位分配 题目 打印正确但是评测显示错误
2
当我用CodeBlocks来输出353的cher时为什么出现的是a
0
关于使用Basy3板进行FPGA设计的小游戏
1
vs2017逐语句调试时怎么保持在源.cpp界面
1
vs2017我更新后怎么用自带的万能头文件。
2
qt在编译c++11 的<"thread">头文件时报错
2
如何使用脚本配置windows组策略
1
ffmepg sws_scale函数在处理4K视频时,速度较慢
2
//求助帖,求助帖,练习c++时的一个错误
1
如何在ubuntu16.04下配置ratslam算法?
2
一副图片如何通过图像处理处理成可供如绗缝机处理的信息。
4
求助大佬:MFC检测扩展显示器时回调函数错误怎么解决。
0
vector中使用自定义allocator编译提示无法将参数转换为,求帮助