Когда я использую функцию 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. Мой 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
Я столкнулся с той же проблемой.
Вот как я решил это:
при использовании cmake обязательно снимите флажок WITH_QT. Внутренняя версия (Qt4.0), используемая в Opencv, может вызвать конфликты с QT Creator (Qt 5.0). Как я решил свою проблему.
просто очистите кэш CMake, снимите WITH_QT (и, возможно, WITH_TBB), затем убедитесь, что предыдущая сборка opencv удалена, а затем перестройте opencv. Бум, теперь он работает!
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;
imread
не работает должным образом в Qt, так работает ли ваш код, если вы сделаете эту строку комментарием? На самом делеglibc detected
связан с управлением памятью. Я также несколько раз получал эту ошибку и обнаружил, что сделал глупую ошибку. Кроме того, это весь ваш код? Я имею в виду, вы уверены, что вы получаете эту ошибку только из-за этих нескольких строк?