【问题标题】:Failed to use imwrite() in Qt Creator in Debug mode在调试模式下无法在 Qt Creator 中使用 imwrite()
【发布时间】:2016-10-17 08:53:07
【问题描述】:

我在 Qt Creator 中使用了imwrite() 函数。我未能在调试模式下运行代码,而在发布模式下成功运行。 我写了一个测试程序。以下是我所做的: 首先使用OpenCV,我在.pro中添加了如下代码:

INCLUDEPATH+=D:\Work_Software\OpenCV3.1\opencv\build\include
LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*.lib

然后我添加了一个按钮。槽函数为:

 void MainWindow::on_pushButton_clicked()
{
    Mat img;
    img=imread("F:\\My_Desktop\\foot1.jpg",0);
    imwrite("F:\\My_Desktop\\result.jpg",img);
    namedWindow("test");
    imshow("test",img);
    waitKey(0);
}

终于,在Release模式下,我可以成功读写图片了。但是,在调试模式下写入失败。错误信息是:

更新

imread在debug模式下工作,比如我把slot函数改成:

void MainWindow::on_pushButton_clicked()
{
    Mat img;
    img=imread("F:\\My_Desktop\\foot1.jpg",0);
    namedWindow("test");
    imshow("test",img);
    waitKey(0);
    imwrite("F:\\My_Desktop\\result.jpg",img);

}

我可以在调试模式下成功加载和imshow图像,但是当我关闭窗口时,发生了同样的错误。

lib文件夹内容:

我刚刚看到类似我的问题 similar problem ,但它无法解决我的问题。

【问题讨论】:

  • imread 在调试模式下会失败吗?您在实际程序中读取(和写入)的文件的路径是否也是绝对的?
  • 您需要链接到调试库(以“d”结尾)。使用LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*d.lib

标签: c++ qt opencv


【解决方案1】:

这是因为您使用 *.lib 命令包含了所有库。在调试模式下,如果您与发布库链接,它会失败。它在发布模式下工作,因为它与发布库链接,因为它首先由于字符串排序而出现。看图

这里的 2411d.lib 代表调试库,2411.lib 代表发布库。我遇到了这个问题,并在调试和发布模式下修复了单独的链接。您可以创建 2 个调试和发布库文件夹,也可以提及库名称而不是 *.lib。

[为您更改版本]

调试链接:LIBS+=D:\Work_Software\OpenCV2.411\opencv\build\x64\vc12\lib\*‌​d.lib

发布链接:LIBS+=D:\Work_Software\OpenCV2.411\opencv\build\x64\vc12\lib\*‌​2411.lib

到单独的文件夹看图片:

文件夹结构:

调试库文件夹:

发布库文件夹:

更新

如果opencv没有用qt正确构建,请关注link

【讨论】:

  • 我已经尝试过你的建议,我修改了我的 .pro:
  • INCLUDEPATH+=D:\Work_Software\OpenCV3.1\opencv\build\include #LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*.lib CONFIG(debug,debug|release) { LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\opencv_world310d.lib } CONFIG(release,debug|release) { LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\opencv_world310.lib }
  • 我还是遇到了同样的问题,我已经更新了我的问题,我的lib文件夹如上所示。
  • 看来你只链接了一个库 o‌​pencv_world310.lib 其他库,比如 opencv_highgui,opencv_imgproc ?没有这个 imwrite 将无法工作
  • 非常感谢。最后一个链接确实有效。当我将imwrite从槽函数移动到main函数时,程序可以在Debug模式下成功运行。
【解决方案2】:

OpenCV dll 和 lib 文件在 CPU 架构(32-64 位)和调试发布模式方面有所不同。如果切换到 Debug 模式,则必须使用 dll 和 lib 文件进行 Debug 模式(取决于 CPU 架构)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多