Qt with OpenCV:程序意外完成

Posted

技术标签:

【中文标题】Qt with OpenCV:程序意外完成【英文标题】:Qt with OpenCV: The program has unexpectedly finished 【发布时间】:2020-06-17 20:30:29 【问题描述】:

我刚刚安装了Qt 5.15,并正在测试它如何与 opencv 一起使用。我下载了 prebuild Opencv4.3,并设置了一个 .pri 文件以部署在 Qt 中。

.pri文件中的include和libs如下:

INCLUDEPATH += C:/opencv/opencv-4.3.0-prebuild/include

CONFIG(release, debug|release):
LIBS += -LC:/opencv/opencv-4.3.0-prebuild/x64/vc14/lib \
        -lopencv_world430


CONFIG(debug, debug|release):
LIBS += -LC:/opencv/opencv-4.3.0-prebuild/x64/vc14/lib \
        -lopencv_world430d

然后我运行一个简单的图像显示domo:

#include "opencv2/opencv.hpp"
using namespace cv;

Mat img = imread("image.png");

if(img.empty())

    qDebug()<<"Could not find the image";

else

    namedWindow("Image");
    imshow("Image", img);

产生的错误信息:The program has unexpectedly finished. The process was ended forcefully.

如果不与 OpenCV 链接,Qt 本身就可以正常工作。

问题的原因是什么?

【问题讨论】:

能否指定代码的位置?您是否尝试过使用调试器(如 gdb)来识别问题发生的行? 【参考方案1】:

不清楚您的示例代码在哪里。是在main 吗? 通常在 OpenCV 中,您也有一个事件循环(如在 Qt 中),但它是隐藏的。 所以如果你想真正看到namedWindow,你需要调用cv::waitKey()

如果你定期调用它,你可以像 cv::waitKey(1) 一样调用它。

但通常你应该只在 OpenCV 中进行图像处理,将 cv::Mat 转换为 QImage,并在 Qt 中显示。

【讨论】:

【参考方案2】:

我发现这个问题是由于在 Qt Creator 中设置了不正确的调试器。参考帖子QtCreator no debugger set up (Windows)。和Cannot run Qt example in Qt creator: The program has unexpectedly finished,以及官方文档https://doc.qt.io/qtcreator/creator-debugger-engines.html#supported-native-debugger-versions和https://doc.qt.io/qtcreator/creator-debugger-engines.html#debugging-tools-for-windows

【讨论】:

【参考方案3】:

对于崩溃,

我的第一个猜测是您的环境变量设置不正确。请检查您分配的环境。变量正确。

在 Qt 中编写 imshow() 将不起作用。按照 tr3w 的建议,您应该转换为 qimage。

垫子;

QImage img1 = QImage((uchar *) img.data,img.cols,img.rows,img.step,QImage::Format_Indexed8);

您可以替换为您支持的图像格式而不是 indexed8。

【讨论】:

【参考方案4】:

I solved the problem as follows: I have added the paths to opencv's bin and lib files to PATH.

【讨论】:

你的回答风格独特。它可以很容易地发现您针对多个问题发布了相同的答案。请不要那样做。

以上是关于Qt with OpenCV:程序意外完成的主要内容,如果未能解决你的问题,请参考以下文章

Qt 程序意外完成

在 qlabel 上显示 openCv 视频的奇怪问题

imShow 上的 OpenCV 崩溃仅适用于 USB 网络摄像头

我的程序意外完成

当 QFileDialog::getOpenFileName 的窗口打开时,程序意外完成

在 Windows 中使用 Qt 配置 openCV