当应用程序链接到 OpenCV 2.3 或 2.4 时,从 jpeg 文件加载 QImage 对象失败。当我尝试从 jpeg 文件创建 QImage 时程序出现段错误
QImage( "some-jpeg.jpg" )
仅当应用程序与 opencv 的 highgui 库链接时,这才是正确的。
我正在使用 OpenCV 2.4 和 Qt 4.8.1 在 Ubuntu 12.04 上构建
有谁知道为什么会发生这种情况以及我该如何解决这个问题?我的研究项目使用 OpenCV 的图像处理代码,前端依赖于 Qt。
我已经向 Qt (https://bugreports.qt-project.org/browse/QTBUG-27032) 提交了错误报告。我在 OpenCV 上试过,但他们的注册项目很糟糕,因为它接受了注册信息,但随后拒绝尝试登录......
qt-cv-jpg-test.pro
QT += core gui
TARGET = qt-cv-jpg-test
TEMPLATE = app
INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib -lopencv_highgui -lopencv_core
SOURCES += main.cpp
主文件
#include <QImage>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
int main(int argc, char *argv[])
{
QString fileName = "some-jpeg.jpg";
cv::Mat cvImage = cv::imread( fileName.toStdString() );
QImage qtImage( fileName );
return 0;
}
程序段错误,但这里是堆栈:
0 jpeg_CreateDecompress /usr/local/lib/libopencv_highgui.so.2.4 0 0x7ffff7ae55fc
1 ?? /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/libqjpeg.so 0 0x7ffff0549ee7
2 ?? /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/libqjpeg.so 0 0x7ffff054a18f
3 QImageReader::read(QImage*) /usr/lib/x86_64-linux-gnu/libQtGui.so.4 0 0x7ffff6c3f0c8
4 QImageReader::read() /usr/lib/x86_64-linux-gnu/libQtGui.so.4 0 0x7ffff6c3f6f7
5 QImage::load(QString const&, char const*) /usr/lib/x86_64-linux-gnu/libQtGui.so.4 0 0x7ffff6c348dc
6 QImage::QImage(QString const&, char const*) /usr/lib/x86_64-linux-gnu/libQtGui.so.4 0 0x7ffff6c34a75
7 main main.cpp 9 0x400d10
我真的不知道为什么 opencv 方法会出现在堆栈的底部。我构建了opencv,告诉它在文件系统上使用libjpeg。我在系统上安装了 libjepg 6.2 和 libjpeg8。