imread没有在qt上工作

时间:2014-02-20 22:06:39

标签: c++ qt opencv ubuntu

当我在基本的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.

4 个答案:

答案 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.dllopencv_world412.dllopencv_videoio_ffmpeg412_64.dll来释放文件夹。