Russian Qt Forum

Qt => Общие вопросы => Тема начата: Disa от Ноябрь 02, 2012, 11:06



Название: OpenCV (MinGW32) + Qt
Отправлено: Disa от Ноябрь 02, 2012, 11:06
Добрый день.

Волею судеб, я никак не могу переставить нормально себе vs 2010 (точнее нормально удалить предыдущую версию). Про это отдельный топик можно заводить :) Ну суть не в этом.

Собрал OpenCV 2.4.2 под MinGW. Собралось все успешно. Теперь есть две папки с библиотеками (bin с *.dll и lib с *.dll.a).
В pro-file все подключил, вот так вот:

Код:
INCLUDEPATH += C:\opencv_2_4_2\include

#это для красоты, чтоб в релизе оставлять только, что нужно релиз проекту...
CONFIG(release,debug|release)
{
  LIBS += C:\opencv_2_4_2\bin\*.dll
}

CONFIG(debug,debug|release)
{
    LIBS += C:\opencv_2_4_2\bin\*.dll
}

Либы вроде подключаются, т.к. если папку прописывать не правильно, вылезает кучу error'ов с undefined reference.
Но после пересборки и запуска проекта (рабочего (правда под версией OpenCV 2.3.8 ), инфа 100%, код не мой) - вылезает:

The program has unexpectedly finished.
*.exe exited with code -1073741515


И еще, я видимо туповат, но *.a либы должны же подключаться, как и обычные *.lib?
То есть LIBS += -Lпуть -lимя либы, без расширения (только вот без 'a' или без 'dll.a'?)

В общем за любую помощь буду благодарен!


Название: Re: OpenCV (MinGW32) + Qt
Отправлено: QtCoder от Ноябрь 02, 2012, 13:13
Добавьте C:\opencv_2_4_2\bin в PATH.


Название: Re: OpenCV (MinGW32) + Qt
Отправлено: Disa от Ноябрь 02, 2012, 16:14
Не помогло :(
Причем экземплы компиляться без проблем, но не работают, а вот собранные make-
install'ом работают. Дурдом какой-то.


Название: Re: OpenCV (MinGW32) + Qt
Отправлено: Bepec от Ноябрь 02, 2012, 16:52
Выложите код проекта. Возможно вы добавляете не все библиотеки, необходимые для работы.

Когда я экспериментировал с OpenCV это стоило мне ммм... двух дней разборки почему это не работает.


Название: Re: OpenCV (MinGW32) + Qt
Отправлено: Disa от Ноябрь 02, 2012, 23:21
В проекте более 10 классов, там обернутый алгоритм с применением CV + GUIшка и парсер с cv камеры в QImage.
Выложить не могу, проект коммерческий.

А нет какого-нибудь макроса или функции для вылавливания cvшных ошибок (как в openGLе)?

Ну я добавляю все dllки которые были при сборки.
У знакомых, когда компилят проект студии - все окей. Я в начале грешил, что версии разные, но семплы которые с OpenCV тоже не пашут... Компиляться, но ничего не происходит. В Application Outputе и Compile Outupe все вроде нормально.
Мб это из-за сборки под MinGW? Но я собирал для MinGW32 и в Creatorе тоже выставляю этот же компилер (Qt 4.8.2 MinGW).

PS: Я уже кстати не первый раз сталкиваюсь с траблами при сборках Make и CMake, мб руки не оттуда :(


Название: Re: OpenCV (MinGW32) + Qt
Отправлено: Bepec от Ноябрь 02, 2012, 23:26
Disa - ничем помочь не могу. Шлем телепата отняли почти 2 года назад при регистрации на форуме :)



Название: Re: OpenCV (MinGW32) + Qt
Отправлено: Disa от Ноябрь 02, 2012, 23:37
Ну мне хотя бы семп любой попробовать. Вот, например, разделения fg и bg (Qt console app):

main.cpp:
Код
C++ (Qt)
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>
 
using namespace std;
using namespace cv;
 
static void help()
{
printf("\nDo background segmentation, especially demonstrating the use of cvUpdateBGStatModel().\n"
"Learns the background at the start and then segments.\n"
"Learning is togged by the space key. Will read from file or camera\n"
"Usage: \n"
" ./bgfg_segm [--camera]=<use camera, if this key is present>, [--file_name]=<path to movie file> \n\n");
}
 
const char* keys =
{
"{c |camera   |true    | use camera or not}"
"{fn|file_name|tree.avi | movie file             }"
};
 
//this is a sample for foreground detection functions
int main(int argc, const char** argv)
{
help();
 
CommandLineParser parser(argc, argv, keys);
bool useCamera = parser.get<bool>("camera");
string file = parser.get<string>("file_name");
   VideoCapture cap;
   bool update_bg_model = true;
 
   if( useCamera )
       cap.open(0);
   else
cap.open(file.c_str());
parser.printParams();
 
   if( !cap.isOpened() )
   {
       printf("can not open camera or video file\n");
       return -1;
   }
 
   namedWindow("image", CV_WINDOW_NORMAL);
   namedWindow("foreground mask", CV_WINDOW_NORMAL);
   namedWindow("foreground image", CV_WINDOW_NORMAL);
   namedWindow("mean background image", CV_WINDOW_NORMAL);
 
   BackgroundSubtractorMOG2 bg_model;//(100, 3, 0.3, 5);
 
   Mat img, fgmask, fgimg;
 
   for(;;)
   {
       cap >> img;
 
       if( img.empty() )
           break;
 
       //cvtColor(_img, img, COLOR_BGR2GRAY);
 
       if( fgimg.empty() )
         fgimg.create(img.size(), img.type());
 
       //update the model
       bg_model(img, fgmask, update_bg_model ? -1 : 0);
 
       fgimg = Scalar::all(0);
       img.copyTo(fgimg, fgmask);
 
       Mat bgimg;
       bg_model.getBackgroundImage(bgimg);
 
       imshow("image", img);
       imshow("foreground mask", fgmask);
       imshow("foreground image", fgimg);
       if(!bgimg.empty())
         imshow("mean background image", bgimg );
 
       char k = (char)waitKey(30);
       if( k == 27 ) break;
       if( k == ' ' )
       {
           update_bg_model = !update_bg_model;
           if(update_bg_model)
            printf("Background update is on\n");
           else
            printf("Background update is off\n");
       }
   }
 
   return 0;
}

*.pro
Код:
QT += core

QT -= gui

TARGET = cv_test
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

INCLUDEPATH += C:\opencv_2_4_2\include

CONFIG(release, debug|release) {
  LIBS += C:\opencv_2_4_2\bin\*.dll
}

CONFIG(debug,debug|release) {
  LIBS += C:\opencv_2_4_2\bin\*.dll
}

SOURCES += main.cpp

Список dllек:
libopencv_calib3d242.dll
libopencv_contrib242.dll
libopencv_core242.dll
libopencv_features2d242.dll
libopencv_flann242.dll
libopencv_gpu242.dll
libopencv_highgui242.dll
libopencv_imgproc242.dll
libopencv_legacy242.dll
libopencv_ml242.dll
libopencv_nonfree242.dll
libopencv_objdetect242.dll
libopencv_photo242.dll
libopencv_stitching242.dll
libopencv_video242.dll
libopencv_videostab242.dll
opencv_ffmpeg242.dll

Все компилиться, но ничего не происходит (только консоль вылезает и там сабж про нажатие RETURN). Сам собранный семпл работает (тот, что собрался make-installом).