当我在基本的qt应用程序中使用imread函数时,应用程序崩溃了。
我的专业档案
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = lab1
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/include/opencv2
LIBS += -L/usr/local/lib
LIBS += -lopencv_core
LIBS += -lopencv_imgproc
LIBS += -lopencv_highgui
LIBS += -lopencv_ml
LIBS += -lopencv_video
LIBS += -lopencv_features2d
LIBS += -lopencv_calib3d
LIBS += -lopencv_objdetect
LIBS += -lopencv_contrib
LIBS += -lopencv_legacy
LIBS += -lopencv_flann
LIBS += -lopencv_nonfree
LIBS += `pkg-config opencv --libs`
代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionSave_changed()
{
cv::Mat img;
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"",tr("Files (*.*)"));
img = cv::imread("image.jpg", CV_LOAD_IMAGE_UNCHANGED);
}
错误
启动 /家庭/ yaltug /桌面/ yavuzlab1 /集结lab1中的-Desktop_Qt_5_2_1_GCC_64bit - 调试/ lab1中的... 检测到 * glibc * / home / yaltug / Desktop / yavuzlab1 / build-lab1-Desktop_Qt_5_2_1_GCC_64bit-Debug / lab1: realloc():无效指针:0x00007f752cd1cd80 * ======= Backtrace:========= /lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f752be10b96] /lib/x86_64-linux-gnu/libc.so.6(realloc+0x28e)[0x7f752be1589e] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_ZN9QListData7reallocEi+0x26)[0x7f752c758016] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_ZN9QListData6appendEi+0x65)[0x7f752c7580d5] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8dba6)[0x7f752c6f5ba6] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8bd17)[0x7f752c6f3d17] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8c9c5)[0x7f752c6f49c5] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_Z20qMessageFormatString9QtMsgTypeRK18QMessageLogContextRK7QString+0x742)[0x7f752c6f5252] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8d405)[0x7f752c6f5405] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8a883)[0x7f752c6f2883] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(+0x8a9da)[0x7f752c6f29da] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_ZNK14QMessageLogger5fatalEPKcz+0xa9)[0x7f752c6f3109] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_ZN9QMetaType22registerNormalizedTypeERK10QByteArrayPFvPvEPFS3_PKvES5_PFS3_S3_S7_Ei6QFlagsINS_8TypeFlagEEPK11QMetaObject+0x567)[0x7f752c8fec47] /home/yaltug/Qt5.2.1/5.2.1/gcc_64/lib/libQt5Core.so.5(_ZN9QMetaType12registerTypeEPKcPFvPvEPFS2_PKvES4_PFS2_S2_S6_Ei6QFlagsINS_8TypeFlagEEPK11QMetaObject+0x61)[0x7f752c8fed01]
7fffa4005000-7fffa4026000 rw-p 00000000 00:00 0 [stack] 7fffa4104000-7fffa4106000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] The program has unexpectedly finished.
答案 0 :(得分:1)
我遇到了同样的问题,我整个上午搜索它并通过重新安装OpenCV来解决它。我的opencv版本是2.4.9,并且在帖子之后构建在Ubuntu 12.04系统上,之后我使用Linux安装程序安装了QT创建者。根据QT 5.3.1,QT创建者的版本是3.1.2。我的OpenCV安装在自定义路径上。 我刚刚删除了构建文件夹
cd opencv-2.4.9
rm -r build
我只是再次构建OpenCV而没有cmake中的-D WITH_QT标志
mkdir build
cd build
cmake -D WITH_XINE=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_EXAMPLES=ON ..
make -j4
sudo make install
make中的-j4标志意味着使4个内核并行。 并且魔术发生了,代码有效! 它不起作用的原因是当使用cmake WITH_QT标志时系统构建opencv 使用系统默认版本的qt,这与最新版本不兼容 qt从网站上下载。但是,为了使其有效,我们必须拥有正确版本的QT
答案 1 :(得分:0)
在void MainWindow::on_actionSave_changed()
中您尚未正确宣布img
。
您只写了cv::Mat
cv::Mat img;
,因为在使用img
两行后,img = cv::imread("image.jpg", CV_LOAD_IMAGE_UNCHANGED);
img
没有数据类型。
因此,请将cv::Mat;
替换为cv::Mat img;
答案 2 :(得分:0)
我遇到了完全相同的问题。
以下是我解决它的方法:
使用cmake时,请务必取消选中WITH_QT。 Opencv中使用的内部版本(Qt4.0)可能会导致与QT Creator(Qt 5.0)冲突,这就是我如何解决我的问题。
只需清除cmake缓存,取消选中WITH_QT(也可能是WITH_TBB),然后确保删除先前的opencv构建,然后重建opencv。热潮,现在有效!
答案 3 :(得分:0)
我遇到了同样的问题,这是因为缺少.dll文件,所以当我将.dll文件复制到发布文件夹(或调试文件夹)时,问题解决了。
我将opencv用于vc15文件,并复制了opencv_world412d.dll
和opencv_world412.dll
和opencv_videoio_ffmpeg412_64.dll
来释放文件夹。