crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Интеграция QT и OpenCV 2.4.6, Проблема с подключение библиотеки OpenCV совместно с QT
skipy
  опции профиля:
сообщение 31.7.2013, 0:49
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 31.7.2013
Пользователь №: 3891

Спасибо сказали: 0 раз(а)




Репутация:   0  


Система: Windows 7 x64. QT: QT 5.1.0 x32;
компилятор mingw 4.8 x32

в системной переменной PATH прописал путь к папке bin (пути к полученным dll opencv в ходе компиляции)

Запускается D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\test3.exe...
Программа неожиданно завершилась.
D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\test3.exe завершился с кодом -1073741819

генерировал конфиги при помощи cmake 2.8.11.2 меняя настройки: WITH_OPENGL - enabled, WITH_QT - enabled
процессорные расширения команд sse сверял с утилитой cpu-z

собирал командами mingw32-make
mingw32-make install
ошибок не было

pro-файл:
#-------------------------------------------------
#
# Project created by QtCreator 2013-07-29T15:12:23
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test3
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui
INCLUDEPATH += D:\qt-workspace\libs\opencv\include
INCLUDEPATH += D:\qt-workspace\libs\opencv\include\opencv
INCLUDEPATH += D:\qt-workspace\libs\opencv\include\opencv2

LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_calib3d246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_contrib246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_core246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_features2d246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_flann246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_gpu246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_highgui246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_imgproc246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_legacy246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_ml246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_nonfree246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_objdetect246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_photo246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_stitching246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_superres246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_ts246.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_video246.dll.a
LIBS += D:\\qt-workspace\libs\opencv\lib\libopencv_videostab246.dll.a

пробовал брать либы из папки install/lib и использовал укороченный синтаксис с "l" "L", но также эффекта не дало
и прописывал к самим dll в папке bin

пробовал менять описание путей динамических либ (брал собранные под mingw либы из библиотеки):
#OPENCV = D:/opencv
#OPENCV_LIB = $$OPENCV/build/x86/mingw/lib
#INCLUDEPATH += $$OPENCV/build/include/opencv $$OPENCV/build/include
#QMAKE_LIBDIR += $$OPENCV_LIB
##CONFIG(debug, debug|release) {
# LIBS += $$files($$OPENCV_LIB/*241d.lib)
#} else {
#  LIBS += $$files($$OPENCV_LIB/*241.lib)
#}




файл mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


файл mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <opencv2/opencv.hpp>

using namespace cv;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Mat image;
    image = cvLoadImage("D:\flowers.jpg");
}

MainWindow::~MainWindow()
{
    delete ui;
}






ps: до этого подключал OpenCV к CodeBlocks без библиотеки QT проблем не было.
Почему необходимо QT: gui приложения предполагаем писать на QT.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 31.7.2013, 7:42
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1593
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(skipy @ 31.7.2013, 3:49) *
завершился с кодом -1073741819

это ошибка обращения к памяти, запись по нулевому указателю или выход за границы массива. обычно грубая ошибка программирования, никак не связанная с библиотеками или компилятором.

Цитата(skipy @ 31.7.2013, 3:49) *
ui->setupUi(this);

у тебя в контрукторе this недоопределён. нельзя так делать. отсюда и ошибка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 31.7.2013, 16:36
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
namespace Ui {
class MainWindow;
}

Рекомендую к прочтению:
Using a Designer UI File in Your Application
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.7.2013, 16:49
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Iron Bug @ 31.7.2013, 8:42) *
у тебя в контрукторе this недоопределён. нельзя так делать. отсюда и ошибка.
Если быть точным, то уже определен, правда не до конца, а вот в случае исключения в конструкторе будут проблемы. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 31.7.2013, 21:21
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1593
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(ViGOur @ 31.7.2013, 19:49) *
Если быть точным, то уже определен, правда не до конца, а вот в случае исключения в конструкторе будут проблемы. ;)

проблемы будут не только в случае с исключениями, но и в случае вызова виртуальных методов и конструкции дочерних классов (http://www.parashift.com/c++-faq/using-this-in-ctors.html).
в общем, лучше не надеяться на авось и не создавать мест для наступания на грабли, особенно когда класс наследуется от чужих классов, реализация которых в любой момент может поменяться. в конструкторе объект должен создаваться и это его главная функция. всё остальное лучше делать вне конструктора.

Сообщение отредактировал Iron Bug - 1.8.2013, 17:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
skipy
  опции профиля:
сообщение 31.7.2013, 21:24
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 31.7.2013
Пользователь №: 3891

Спасибо сказали: 0 раз(а)




Репутация:   0  


как я понял проблема с библиотекой libstdc++-6.dll
стек вызовов:
Thread 1 (Thread 7144.0x1a78):
#0 0x6fc830d0 in ?? () from D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\libstdc++-6.dll
No symbol table info available.
#1 0x106e9e9a in cv::BmpDecoder::BmpDecoder() () from D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\libopencv_highgui246.dll
No symbol table info available.
#2 0x106f8a90 in cv::ImageCodecInitializer::ImageCodecInitializer() () from D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\libopencv_highgui246.dll
No symbol table info available.
#3 0x1079f5f7 in _GLOBAL__sub_I__ZN2cv6imreadERKSsi () from D:\qt-workspace\hello_opencv\test3\build-test3-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\libopencv_highgui246.dll
No symbol table info available.
#4 0x106b1eef in __do_global_ctors () at ../mingw/gccmain.c:59
nptrs = <optimized out>
i = 2
#5 0x106b10f3 in DllMainCRTStartup@12 (hDll=0x106b0000, dwReason=1, lpReserved=0x28fd24) at ../mingw/dllcrt1.c:83
bRet = <optimized out>
#6 0x77839950 in ntdll!RtlpNtMakeTemporaryKey () from C:\Windows\system32\ntdll.dll
No symbol table info available.
#7 0x106b0000 in ?? ()
No symbol table info available.
#8 0x7783d8c9 in ntdll!RtlEmptyAtomTable () from C:\Windows\system32\ntdll.dll
No symbol table info available.
#9 0x106b1058 in __dll_exit () at ../mingw/dllcrt1.c:158
next_atexit = 0x34108
first_atexit = 0x34050
#10 0x7784681c in ntdll!RtlStatMemoryStream () from C:\Windows\system32\ntdll.dll
No symbol table info available.
#11 0x0028fd24 in ?? ()
No symbol table info available.
#12 0x778452d6 in ntdll!TpCaptureCaller () from C:\Windows\system32\ntdll.dll
No symbol table info available.
#13 0x0028fd24 in ?? ()
No symbol table info available.
#14 0x77839e79 in ntdll!RtlpNtSetValueKey () from C:\Windows\system32\ntdll.dll
No symbol table info available.
#15 0x0028fd24 in ?? ()
No symbol table info available.
#16 0x00000000 in ?? ()
No symbol table info available.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
skipy
  опции профиля:
сообщение 31.7.2013, 22:35
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 31.7.2013
Пользователь №: 3891

Спасибо сказали: 0 раз(а)




Репутация:   0  


по ходу я понял, всё-таки неправильно скомпилировал либы
cmake 2.8.11.2 не имеет findQt5CMake, а значит надо вручную прописывать пути к make-файлам
Qt5Concurrent_DIR-NOTFOUND
Qt5Core_DIR-NOTFOUND
Qt5Test_DIR-NOTFOUND
Qt5Widgets_DIR-NOTFOUND
только теперь вот такой вопрос: где они находятся?
Или их нету и необходимо самому написать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 1.8.2013, 13:47
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(skipy @ 31.7.2013, 23:35) *
только теперь вот такой вопрос: где они находятся?
Или их нету и необходимо самому написать
Они есть в сырцах Qt, если ты используешь уже сконфигуренное и скомпиленное Qt, то тебе нужно скачать исходники Qt, и самому сконфигурить их...


Цитата(Iron Bug @ 31.7.2013, 22:21) *
роблемы будут не только в случае с исключениями, но и в случае вызова виртуальных методов и контрукции дочерних классов
Про виртуальные методы вылетело из головы... Я не говорю, что это правильно, а говорю о том, что для Qt Designer это принято и *.h c *.cpp файлы автоматически генерируются Qt Designer, которые отвечают за ручную компановку форм...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
skipy
  опции профиля:
сообщение 2.8.2013, 3:05
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 31.7.2013
Пользователь №: 3891

Спасибо сказали: 0 раз(а)




Репутация:   0  


скорей всего с Qt5 не совместимость. Поставил Qt4.8 - заработало


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Dmitry_*_*
сообщение 27.8.2013, 10:10
Сообщение #10





Гости








    


C Qt 5 сейчас совместима последняя версия openCV - 2.4.6. Для предыдущих надо было много телодвижений.

На самом деле главное чтобы Qt и openCV были собраны одной версией компилятора. WITH_QT лишь добавляет дополнительные фичи
для openCV GUI, без которых вполне можно обойтись, тем более GUI все равно будет построен на QT.
До выхода последней версии openCV я просто качал установщик Qt5 на mingw, компилятор устанавливается вместе с пакетом,
потом этим компилятором собирал OpenCV, но без WITH_QT. Пару дней назад прочитал, что теперь есть совместимость с QT5 и собрал с WITH_QT.

P.S. Может у меня в проекте чет не так, но расширеный GUI тупит страшно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.11.2019, 1:18