【问题标题】:OpenCV 2.4.5, eclipse CDT Juno, MinGW error 0xc0000005OpenCV 2.4.5,日食 CDT Juno,MinGW 错误 0xc0000005
【发布时间】:2013-06-30 18:06:09
【问题描述】:

在 Windows 7 64 位 AMD 处理器上,我安装了 OpenCV 2.4.5,带有 eclipse CDT Juno 和 MinGW,一切都是最新的更新。以前eclipse CDT 和MinGW 编译100+ 源文件都没有问题。他们甚至编译了这个小的 OpenCV 源文件,

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;

int main()
{
    IplImage* img1 = cvLoadImage("lenna.png");
    cvShowImage("MyWindow1", img1);

    cv::Mat img2;
    img2 = cv::imread("lenna.png", CV_LOAD_IMAGE_COLOR);

    cv::namedWindow("MyWindow2", CV_WINDOW_AUTOSIZE);
    cv::imshow("MyWindow2", img2);

    cvWaitKey(0);
    return 0;
}

但是当我尝试运行它时,它会因臭名昭著而崩溃

“应用程序无法正确启动(0xc0000005)。点击确定 关闭应用程序。”

可能有什么问题以及解决这个问题的方法是什么?

  1. OpenCV(预编译)解压到“C:\OpenCV245PC\(README、index.rst 和 CMakeLists.txt 包含所有子文件夹)
  2. Windows 系统路径设置为 C:\OpenCV245PC\build\x86\mingw\bin
  3. Eclipse GCC C++ 编译器,包含路径 (-I) 设置为“C:\OpenCV245PC\build\include”
  4. Eclipse MinGW C++ 链接器,库搜索路径 (-L) 设置为:“C:\OpenCV245PC\build\x86\mingw\lib”
  5. Eclipse MinGW C++ 链接器、库 (-l) 设置为:

opencv_calib3d245 opencv_contrib245 opencv_core245 opencv_features2d245 opencv_flann245 opencv_gpu245 opencv_highgui245 opencv_imgproc245 opencv_legacy245 opencv_ml245 opencv_nonfree245 opencv_objdetect245 opencv_photo245 opencv_stitching245 opencv_video245 opencv_videostab245

【问题讨论】:

  • 您的构建类型、调试或发布是什么?因为您似乎没有链接调试库(245d)。
  • 预编译版本中没有调试库(或者至少我找不到它们)。无论如何,Release 和 Debug 都会产生相同的结果 - 错误。

标签: windows opencv mingw eclipse-cdt


【解决方案1】:

经过多次尝试和错误,我决定遵循this 教程并编译我自己的二进制文件,因为似乎有太多人抱怨预编译的二进制文件不适合他们。 Eclipse CDT Juno 已安装。

我的程序如下:

  1. 下载并安装 MinGW 并添加到系统 PATH 中 c:/mingw/bin
  2. http://www.cmake.org下载cmake并安装
  3. 下载OpenCV2.4.5 Windows版
  4. 将 Opencv 安装/解压缩到 C:\OpenCV245PC\(README、index.rst 和 CMakeLists.txt 包含所有子文件夹)
  5. 运行 CMake GUI 工具,然后
  6. 选择 C:\OpenCV245PC\ 作为源
  7. 选择目标,C:\OpenCV245MinGW\x86 构建二进制文件的位置
  8. 按配置按钮,选择 MinGW Makefiles 作为生成器。窗口中有一些红色高亮显示,根据需要选择选项。
  9. 再次按下配置按钮。配置现已完成。
  10. 按“生成”按钮。
  11. 生成完成后退出程序。
  12. 退出 Cmake 程序。
  13. 运行命令行模式(cmd.exe)并前往目的地 目录 C:\OpenCV245MinGW\x86
  14. 键入“mingw32-make”。你会看到建设的进展 二进制文件。如果找不到该命令,则必须确保 系统 PATH 添加了 c:/mingw/bin。构建继续 根据选择的选项完成。
  15. 在Windows系统PATH(我的电脑>右键单击> 属性>高级>环境变量>路径)添加 目的地的bin目录,C:\OpenCV245MinGW\x86\bin
  16. 重启电脑
  17. 转到 Eclipse CDT IDE,使用示例 OpenCV 代码创建一个 C++ 程序(您可以使用本主题顶部的代码)。
  18. 转到项目 > 属性 > C/C++ 构建 > 设置 > GCC C++ 编译器 > 包含,然后添加 源 OpenCV 文件夹“C:\OpenCV245PC\build\include”
  19. 转到项目 > 属性 > C/C++ 构建 > 设置 > MinGW C++ 链接器 > 库,然后逐个添加到 库 (-l)(这可能因项目而异,你可以添加所有的人,如果你喜欢或其中的一些只是那些你需要为您的项目):opencv_calib3d245 opencv_contrib245 opencv_core245 opencv_features2d245 opencv_flann245 opencv_gpu245 opencv_highgui245 opencv_imgproc245 opencv_legacy245 opencv_ml245 opencv_nonfree245 opencv_objdetect245 opencv_photo245 opencv_stitching245 opencv_video245 opencv_videostab245
  20. 将构建的 OpenCV 库文件夹“C:\OpenCV245MinGW\x86\lib”添加到库搜索路径 (-L)

您可以使用此代码来测试您的设置:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{

Mat img = imread("c:/lenna.png", CV_LOAD_IMAGE_COLOR);

namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);
imshow("MyWindow", img);

waitKey(0);
return 0;
}

别忘了把图片放到 C:/ (或者任何你觉得合适的地方,只要确保 eclipse 有读取权限。

【讨论】:

    【解决方案2】:

    你能试试这个代码吗,

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    
    Mat img = imread("lenna.png", CV_LOAD_IMAGE_COLOR);
    
    namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);
    imshow("MyWindow", img);
    
    waitKey(0);
    return 0;
    }
    

    因为您似乎没有为 img1 创建一个窗口,也没有将 imread 输出分配给 img2。

    【讨论】:

    • 为img1创建一个窗口并不重要,实际上甚至可以省略为img2创建一个窗口(我测试过,它可以双向工作)。但是,重要但不是我问的错误是我(正如您所指出的)没有将 imread 输出分配给 img2。通过使用 MinGW 为 OpenCV2.4.5 自定义构建二进制文件解决了问题。之后,出现了与此处相同的其他错误“bad flag error”:stackoverflow.com/questions/11494119/…。您对代码的修改解决了该错误,感谢您指出这一点。
    • 所以我改变了这一行 cv::imread("lenna.png", CV_LOAD_IMAGE_COLOR);到这个 img2 = cv::imread("lenna.png", CV_LOAD_IMAGE_COLOR);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多