【问题标题】:Qt with OpenCV: The program has unexpectedly finishedQt with OpenCV:程序意外完成
【发布时间】: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)来识别问题发生的行?

标签: qt opencv


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    【解决方案3】:

    对于崩溃,

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

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

    垫子;

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

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

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 你的回答风格独特。它可以很容易地发现您针对多个问题发布了相同的答案。请不要那样做。
      猜你喜欢
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多