OpenCV 2.2 VS2010-获取一个;访问冲突读取“;在一个非常简单的代码中 我刚刚安装了OpenCV 2.2和Visual C++ 2010,并配置了它。 我没有得到编译错误,但是运行这段代码我得到了这个错误 Unhandled exception at 0x6c2f22f2 (msvcr100.dll) in Es_CornerDetector.exe: 0xC0000005: access violation reading location 0x002a1000.

OpenCV 2.2 VS2010-获取一个;访问冲突读取“;在一个非常简单的代码中 我刚刚安装了OpenCV 2.2和Visual C++ 2010,并配置了它。 我没有得到编译错误,但是运行这段代码我得到了这个错误 Unhandled exception at 0x6c2f22f2 (msvcr100.dll) in Es_CornerDetector.exe: 0xC0000005: access violation reading location 0x002a1000.,c++,visual-studio-2010,opencv,C++,Visual Studio 2010,Opencv,代码: 我真的不明白原因是什么 更新: “detector.create()”的使用可能是错误的,因此我尝试了不同的方法,但我遇到了另一个错误(总是在尝试访问“detector”时): 备选代码: #include "opencv\cv.h" #include "opencv\highgui.h" #include "opencv2\features2d\features2d.hpp" #include <vector> #include <iostream> int

代码:

我真的不明白原因是什么

更新: “detector.create()”的使用可能是错误的,因此我尝试了不同的方法,但我遇到了另一个错误(总是在尝试访问“detector”时):

备选代码:

#include "opencv\cv.h"
#include "opencv\highgui.h"
#include "opencv2\features2d\features2d.hpp"
#include <vector>
#include <iostream>

int main()
{
    IplImage* img_temp = cvLoadImage("img.jpg");
    cv::Mat img(img_temp);
    if(img.empty()==1)
    {
            std::cout << "Can't load the image.." << endl;
        getchar();
        return -1;
    }

    cv::SurfFeatureDetector detector;
    vector<cv::KeyPoint> keypoints;
    detector.detect(img,keypoints);
    return 0;
}

我就要放弃了

在VS中查看t以查看正在加载的opencv dll。确保dll是您期望的dll


您还可以使用SysInternals套件中的ProcMon查看正在加载的内容。

尝试获取OpenCV 2.3.1超级包。如果这仍然给您带来麻烦,我会尝试使用从源代码处编译OpenCV。遵循以下步骤从源代码构建OpenCV

除了DLL与可执行文件不在同一目录中这一明显问题外,这看起来可能是编译的二进制体系结构(即32位/VS2005与64位/VS2010)与正在运行的体系结构不匹配

希望这是有帮助的

编辑: 你能试着编译并运行这段代码吗(这在我的系统上运行得很好)?确保使用2.3.1版本进行此操作

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <vector>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    Mat image = imread("yourimage.jpg", 0);

    Ptr<FeatureDetector> detector = FeatureDetector::create("FAST");

    vector<KeyPoint> points;
    detector->detect(image, points);

    Mat imageColor;
    cvtColor(image, imageColor, CV_GRAY2BGR);
    drawKeypoints(imageColor, points, imageColor, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_OVER_OUTIMG);
    imshow("imageColor", imageColor);
    waitKey();

    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间cv;
int main(int argc,char*argv[])
{
Mat image=imread(“yourmage.jpg”,0);
Ptr检测器=功能检测器::创建(“快速”);
矢量点;
检测器->检测(图像、点);
Mat图像颜色;
CVT颜色(图像、图像颜色、CV_灰度2BGR);
drawKeypoints(imageColor,points,imageColor,Scalar(255,0,0),DrawMatchesFlags::DRAW\u OVER\u OUTIMG);
imshow(“imageColor”,imageColor);
waitKey();
返回0;
}

您还可以发布一个链接到您试图运行功能检测的图像吗?另外,您是如何在Visual Studio中创建项目的?

您需要确保属性->链接器->输入下的以下“附加依赖项”是指具有调试器支持的正确OpenCV库

i、 e

而不是

C:\OpenCV2.2\lib\opencv_calib3d220.lib
C:\OpenCV2.2\lib\opencv_core220.lib
C:\OpenCV2.2\lib\opencv_features2d220.lib
C:\OpenCV2.2\lib\opencv_highgui220.lib
C:\OpenCV2.2\lib\opencv_imgproc220.lib

我也遇到了同样的问题,并发现在我的系统路径中包含opencv二进制文件的目录被错误地引导到包含vc10或vc9 opencv二进制文件的错误目录。看看你的问题是不是像这样。希望这有帮助。

我将MFC的用法改为“共享DLL中的MFC”,并为我解决了这个问题。

解决方案是使用带有“d”后缀的库(如“opencv_core244d.lib”)进行调试,并使用普通库(如“opencv_core244.lib”)进行发布。它只是工作。
祝你好运

确保在项目依赖项设置中包括opencv_nonfreeXXXX.lib,同样的方法包括其他lib(例如opencv_coreXXXXd)。然后必须明确声明这一行代码:

initModule_nonfree()

在使用SURF或SIFT执行任何操作之前,请在源代码中输入。他们不再自由了!浪费了一天的时间来搞清楚这件事


抛出的错误消息使您不知道这可能是问题所在。

您可能会将OpenCV库链接到默认的Visual Studio配置(所有配置),而不是单独的调试和发布配置

要更改配置,请选择:

  • 项目-->配置的属性(左上角)-->选择Debug
  • 项目-->链接器-->输入-->其他依赖项的属性
  • 确保链接OpenCV调试库(请参见类似OpenCV_Calib320d.lib的最终d):

  • 项目属性-->配置(左上角)-->选择Release
  • 项目-->链接器-->输入-->其他依赖项的属性
  • 确保链接OpenCV发行版库(没有最终的d):


    希望这对您有所帮助。

    检查您包含的.dll和d.dll是否与opencv文件夹“d.dll”和“.dll”(用于发布和调试模式)中的完全相同。有时,我们遵循教程,不检查他们给出的名称是否与我们的名称匹配。(他们可能正在使用其他Opencv版本,并且名称会有所更改)。

    您能否指向一个显示“使用中创建”的链接?我在API文档中没有看到它。是的,可能使用错误()。。我认为正确的用法应该是:cv::FeatureDetector*detector;探测器->创建(“冲浪”);但我也犯了同样的错误我不是专家,但dll似乎很好。加载了5个opencv dll和许多其他系统库。唯一的疑问是,在5 opencv dll输出中,“二进制未使用调试信息构建”可能与问题有关吗?“二进制未使用调试信息构建”-这应该可以。我的直觉与mevatron相似,因为我认为使用的dll和链接的库不匹配。从源代码构建是个好主意,验证所有加载的DLL和LIB都来自同一个编译,然后这将消除这一潜在问题。使用OpenCV 2.3.1,我得到一个不同的(同时也是神秘的)错误(见上文)。关于架构,我认为没有关系,因为我在32位VS10和64位VS10上测试了相同的代码。。。。经过两个多星期的努力,我无法告诉你,也无法感谢你分享这个问题。这完全解决了我的问题。然而,在我的例子中,我使用了
    initModule\u features2d()
    。多谢各位+100为什么OpenCV没有更多地谈论这个功能?@OliverSpryn:我完全理解你的感受!:)我很高兴你能成功!
    Run-Time Check Failure #2 - Stack around the variable 'keypoints' was corrupted.
    
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/features2d/features2d.hpp>
    #include <vector>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char* argv[])
    {
        Mat image = imread("yourimage.jpg", 0);
    
        Ptr<FeatureDetector> detector = FeatureDetector::create("FAST");
    
        vector<KeyPoint> points;
        detector->detect(image, points);
    
        Mat imageColor;
        cvtColor(image, imageColor, CV_GRAY2BGR);
        drawKeypoints(imageColor, points, imageColor, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_OVER_OUTIMG);
        imshow("imageColor", imageColor);
        waitKey();
    
        return 0;
    }
    
    C:\OpenCV2.2\lib\opencv_calib3d220d.lib
    C:\OpenCV2.2\lib\opencv_core220d.lib
    C:\OpenCV2.2\lib\opencv_features2d220d.lib
    C:\OpenCV2.2\lib\opencv_highgui220d.lib
    C:\OpenCV2.2\lib\opencv_imgproc220d.lib
    
    C:\OpenCV2.2\lib\opencv_calib3d220.lib
    C:\OpenCV2.2\lib\opencv_core220.lib
    C:\OpenCV2.2\lib\opencv_features2d220.lib
    C:\OpenCV2.2\lib\opencv_highgui220.lib
    C:\OpenCV2.2\lib\opencv_imgproc220.lib
    
    C:\OpenCV_Path\lib\opencv_calib3d220d.lib
    C:\OpenCV_Path\lib\opencv_core220d.lib
    C:\OpenCV_Path\lib\opencv_features2d220d.lib
    C:\OpenCV_Path\lib\opencv_highgui220d.lib
    C:\OpenCV_Path\lib\opencv_imgproc220d.lib
    
    C:\OpenCV_Path\lib\opencv_calib3d220.lib
    C:\OpenCV_Path\lib\opencv_core220.lib
    C:\OpenCV_Path\lib\opencv_features2d220.lib
    C:\OpenCV_Path\lib\opencv_highgui220.lib
    C:\OpenCV_Path\lib\opencv_imgproc220.lib