imread не работает на QT

0

Когда я использую функцию imread в основном приложении qt, приложение аварийно завершает работу.

Мой профайл

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);

} 

ошибка

Начало /home/yaltug/Desktop/yavuzlab1/build-lab1-Desktop_Qt_5_2_1_GCC_64bit-Debug/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 ([ CN01]) [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/Library/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.
Теги:
opencv
qt

3 ответа

1

Я столкнулся с той же проблемой, я ищу ее все утро и решая ее, переустановив OpenCV. Мой opencv был версией 2.4.9 и основывался на системе Ubuntu 12.04 после публикации, позже я установил создателя QT с помощью установщика Linux. Версия создателя QT 3.1.2 на основе QT 5.3.1. Мой OpenCV был установлен по индивидуальному пути. Я просто удалил папку сборки

cd opencv-2.4.9
rm -r build

и я просто создаю OpenCV снова без флага -D WITH_QT в cmake

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

-j4 флаг в make означает, что сделать в 4 ядра параллельно. и Magic происходит, код работает! причина, по которой он не работает, заключается в том, что при использовании флага cmake WITH_QT система создает opencv, используя системную версию qt по умолчанию, которая несовместима с самой новой версией qt, загруженной с веб-сайта. однако, чтобы заставить его работать, мы должны иметь правильную версию QT

0

Я столкнулся с той же проблемой.

Вот как я решил это:

при использовании cmake обязательно снимите флажок WITH_QT. Внутренняя версия (Qt4.0), используемая в Opencv, может вызвать конфликты с QT Creator (Qt 5.0). Как я решил свою проблему.

просто очистите кэш CMake, снимите WITH_QT (и, возможно, WITH_TBB), затем убедитесь, что предыдущая сборка opencv удалена, а затем перестройте opencv. Бум, теперь он работает!

0

in 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;

  • 0
    Когда я делюсь своим вопросом, я по ошибке удалил объявление «img». Я сожалею об этом. Это не связано с моей проблемой.
  • 0
    вы написали, что imread не работает должным образом в Qt, так работает ли ваш код, если вы сделаете эту строку комментарием? На самом деле glibc detected связан с управлением памятью. Я также несколько раз получал эту ошибку и обнаружил, что сделал глупую ошибку. Кроме того, это весь ваш код? Я имею в виду, вы уверены, что вы получаете эту ошибку только из-за этих нескольких строк?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню