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:程序意外完成的主要内容,如果未能解决你的问题,请参考以下文章