【问题标题】:Cannot run Opencv with C++ syntax无法使用 C++ 语法运行 Opencv
【发布时间】:2011-12-13 11:42:36
【问题描述】:
  • 我在 Visual Studio 2010 (vc10) 上使用 Opencv 2.3.1
  • 我已经根据很多教程配置了opencv,可以编译和运行C-syntax程序,比如:

#include "StdAfx.h"
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main ()
{
    IplImage* img = cvLoadImage("D:\cat_helmet.jpg", CV_LOAD_IMAGE_UNCHANGED);
    cvNamedWindow("display", CV_WINDOW_AUTOSIZE);
    cvShowImage("display", img );
    cvWaitKey(0);        

    return 0;
}

但是,我不能像运行 C++ 语法程序

#include "StdAfx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std; 

int main(  )
{ 
    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );
    Mat image;
    image = imread("D:\cat_helmet", CV_LOAD_IMAGE_COLOR);   

    if(! image.data )                             
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    imshow( "Display window", image );                   

    waitKey(0);                                          
    return 0;
}

我收到错误消息(在函数调用中:namedWindowimreadimshow

First-chance exception at 0x5361fcc3 in FirstOpencv2.3.exe: 0xC0000005: Access violation reading location 0x2079616c.

Unhandled exception at 0x5361fcc3 in FirstOpencv2.3.exe: 0xC0000005: Access violation reading location 0x2079616c.

我该如何解决这个问题?

【问题讨论】:

  • "D:\cat_helmet" 绝对是错误的。 "D:\\cat_helmet.jpg".
  • 在 namedWindow() 命令中出现访问冲突错误。两种声明图像文件的方式都可以。我成功编译并运行了上面的前一段代码。
  • 你是把opencv_core231.dll和opencv_highgui231.dll放在run目录下,还是把这些dll放在path里,这样就可以动态链接了?
  • 考虑查看我们的教程,了解如何在 VS2010 上安装/配置 OpenCV 2.3:stackoverflow.com/questions/7011238/…
  • @karlphillip:我几天前就跟着你的教程。太棒了,谢谢 :) 现在,我已经转移到 Ubuntu 11.10,仍然使用 Opencv 2.3 并且可以正确运行代码。可能是 Opencv 的 C++ 接口对于 Windows 仍然不稳定。任何想在 ubuntu 上使用 opencv 的人都可以在这里看到一个很棒的教程:ozbots.org/opencv-installation

标签: c++ c visual-studio-2010 opencv


【解决方案1】:

您说您已遵循大量指南和教程。我在这个方面取得了巨大的成功 http://www.anlak.com/using-opencv-2-3-1-with-visual-studio-2010-tutorial/

问题是这个人会带你穿过“公园”,帮助你在设置 OpenCV 2.3.1 时解决两个主要问题;其中之一是在项目文件夹中放置 .dll 文件。另一个是缺少的 .dll 'tbb_debug.dll'(这个 .dll 的缺失被认为是 OpenCV 2.3.1 中的错误)。

他还提供了一些不错的 code-sn-ps 供您试用(使用 c++ 语法)。

祝你好运。

【讨论】:

  • 我尝试按照教程进行操作,现在一切正常。非常感谢。
  • @ducnm,很高兴我能帮上忙。在我的研究中,有 8 组 5 人各自冒险尝试 OpenCV 和 OpenFrameworks,超过 75% 的人遇到了重大问题。像我发布的那样的指南正是我们在开始学习图像处理时所需要的。
【解决方案2】:

上面提到的答案没有意义。我也面临同样的问题。此异常的主要原因是您试图显示为空的图像(由 imread 读取)。程序中的主要问题是行

    image = imread("D:\cat_helmet", CV_LOAD_IMAGE_COLOR); 

我认为 imread 函数的行为不符合预期。还有一件事,在浏览参考资料时,我发现了以下链接:

http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#Matimread(const string& filename, int flags)

这里,imread 是通过引用方法调用来使用的。我不是 C++ 专家,但我觉得这可能是问题所在。

    int main() 
    {
      std::string imgPath("splash.bmp"); //Add your file name
      Mat img = imread(imgPath);
      namedWindow( "Example1", WINDOW_AUTOSIZE);
      imshow("Example1", img);
      waitKey(0);
      return 0;
    }

这段代码对我有用。此外,我将文件放在可执行文件旁边以降低复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2019-04-20
    • 2012-06-27
    • 2022-08-09
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多