SmileGobo 2 Жалоба Опубликовано March 6, 2013 Ты просто компилируешь OpenCV и Qt с разными параметрами. Qt берется готовый и я также брал готовые билды opencv. Ещё можешь посмотреть на зависимости (таблицу импорта) в qt'шных dll и в opencv'шных. Я не знаю как выгрузить классы Opencv с помощью LoadLibrary, да и вообще как под винду собрать без указания статических либ тоже не имею понятия, под Linux компилер сам подхватывал so вместо .lib Ещё можешь посмотреть на зависимости (таблицу импорта) в qt'шных dll и в opencv'шных. Если ты вдруг это сделаешь, то покажи здесь. Как это можно сделать? Или выложи что-ли свой exe со всеми используемыми dll. Чуть позже доеду домой выложу, если надо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SmileGobo 2 Жалоба Опубликовано March 6, 2013 Может быть еще дело в CRT. При сборке Opencv там есть пункт, позволяющий выбирать между статическим и динамическим вариантом. По моему он должен совпадать с тем, что выбран в установках проекта. Пробовал менять его не помогло Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 6, 2013 Qt берется готовый и я также брал готовые билды opencv. Это не гарантия. Я не знаю как выгрузить классы Opencv с помощью LoadLibrary, да и вообще как под винду собрать без указания статических либ тоже не имею понятия, под Linux компилер сам подхватывал so вместо .lib Этого не надо. Я в предыдущем посте писал, что надо просто вызвать и на какие коды ошибок смотреть. Как это можно сделать? Я в шестнадцатеричном редакторе Far'а смотрю. Можно плагин к нему поставить, который это сам сделает. P.S. Согласен, что в Линуксе зависимости отслежииваются проще. То, с чем ты сейчас столкнулся, называется то ли dll hell, то ли dependency hell. Прочувствуй это. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SmileGobo 2 Жалоба Опубликовано March 6, 2013 QStringList libs_name; libs_name <<"opencv_calib3d243.dll" <<"opencv_contrib243.dll" <<"opencv_core243.dll" <<"opencv_features2d243.dll" <<"opencv_ffmpeg243.dll" <<"opencv_flann243.dll" <<"opencv_gpu243.dll" <<"opencv_highgui243.dll" <<"opencv_imgproc243.dll" <<"opencv_legacy243.dll" <<"opencv_ml243.dll" <<"opencv_nonfree243.dll" <<"opencv_objdetect243.dll" <<"opencv_photo243.dll" <<"opencv_stitching243.dll" <<"opencv_ts243.dll" <<"opencv_video243.dll" <<"opencv_videostab243.dll"; const QString base_path="D:\\projects\\opencv243\\opencv\\build\\x86\\vc10\\bin\\"; for(int i=0;i<libs_name.size();i++){ QString full_name=base_path+libs_name[i]; std::wstring str = full_name.toStdWString (); HINSTANCE mod=LoadLibrary(str.c_str()); if (mod==NULL){ QString msg="can't load module "; msg+=full_name+" "+QString::number(GetLastError()); QFileInfo fi(full_name); if (!fi.exists()){ msg+=" file not found!"; } qDebug()<<msg; } Результат: "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_calib3d243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_contrib243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_features2d243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_gpu243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_legacy243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_nonfree243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_stitching243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_ts243.dll 126" "can't load module D:\projects\opencv243\opencv\build\x86\vc10\bin\opencv_videostab243.dll 126" Не может загрузить либы! 0_о Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 7, 2013 Ага, чуть лучше. Но надо бы ещё посмотреть на Output и на все твои dll. Проблема может быть в разных манифестах, например. Или зависимостях. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SmileGobo 2 Жалоба Опубликовано March 7, 2013 Depency Walker при использовании его на opencv_highgui.dll и QtCore4.dll ругается на отсутствие IESHIMS.DLL Хотя по отдельности эти либы работают... 0_о А Output что под этим подразумевается? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 7, 2013 Depency Walker при использовании его на opencv_highgui.dll и QtCore4.dll ругается на отсутствие IESHIMS.DLL Хотя по отдельности эти либы работают... 0_о Ну блин! Тебе действительно так сложно вывести эти зависимости здесь, на форуме (или dll, чтобы самому посмотреть)? Я уже пару дней тебя об этом спрашиваю. Если вопрос не важен, то ладно. А Output что под этим подразумевается? Стандартный out приложений. В студии естьодноимённое окошко. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SmileGobo 2 Жалоба Опубликовано March 7, 2013 Стандартный out приложений. В студии есть одноимённое окошко. std::cout не знаю как его отображать в Qt creator Ну блин! Тебе действительно так сложно вывести эти зависимости здесь, на форуме (или dll, чтобы самому посмотреть)? Я уже пару дней тебя об этом спрашиваю. Если вопрос не важен, то ладно. Сложно я не знаю как это сделать, но я постараюсь узнать В общем взял стакан коньяка, а потом Qt 4.8.1 и все завелось. Баг крайне странный ,ну да ладно всем большое спасибо! 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 12, 2013 Qt 5.0.1 OpenCV 2.4.3 сделал для себя через Cmaker библиотеки MinGW и написал небольшу программку pro: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = firstQt TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui INCLUDEPATH +=C:\\OpenCV243\\pro\\install\\include LIBS += -LC:\\OpenCV243\\pro\\install\\lib \ -Llibopencv_contrib243d \ -Llibopencv_features2d243d \ -Llibopencv_flann243d \ -Llibopencv_highgui243d \ -Llibopencv_objdetect243d \ -Llibopencv_video243d \ -Llibopencv_legacy243d \ -Llibopencv_calib3d243d \ -Llibopencv_ml243d Заголовок: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; cv::VideoCapture camWebcam; cv::Mat matOriginal; cv::Mat matProcessed; QImage gimgOriginal; QImage gimgProcessed; std::vector<cv::Vec3f> vecCircles; std::vector<cv::Vec3f>::iterator itrCircles; QTimer* tmrTimer; public slots: void proFrameAndUpdateGUI(); private slots: void on_BtnPause_clicked(); }; #endif // MAINWINDOW_H срр: #include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); camWebcam.open(0); if(camWebcam.isOpened() == false){ ui->txtCanvas->append("error: camWebcam not accsess succsesfuly"); return; } tmrTimer = new QTimer(this); connect(tmrTimer, SIGNAL (timeout()), this, SLOT(proFrameAndUpdateGUI())); tmrTimer->start(20); } MainWindow::~MainWindow() { delete ui; } void MainWindow::proFrameAndUpdateGUI(){ camWebcam.read(matOriginal); if (matOriginal.empty() == true) return; cv::inRange(matOriginal, cv::Scalar(0,0,175), cv::Scalar(100,100, 256), matProcessed); cv::GaussianBlur(matProcessed, matProcessed, cv::Size(9,9), 1.5); cv::HoughCircles(matProcessed, vecCircles, CV_HOUGH_GRADIENT, 2, matProcessed.rows / 4, 100, 50, 10, 400); for (itrCircles = vecCircles.begin(); itrCircles !=vecCircles.end(); itrCircles++){ ui->txtCanvas->append(QString("Ball position x=") + QString::number((*itrCircles)[0]).rightJustified(4, ' ') + QString(", y=")+QString::number((*itrCircles)[1]).rightJustified(4, ' ')+ QString(", radius =") + QString::number((*itrCircles)[2], 'f', 3).rightJustified(7, ' ')); cv::circle(matOriginal, cv::Point((int)(*itrCircles)[0], (int)(*itrCircles)[1]), 3, cv::Scalar(0,255,0), CV_FILLED); cv::circle(matOriginal, cvPoint((int)(*itrCircles)[0], (int)(*itrCircles)[1]), (int)(*itrCircles)[2], cv::Scalar(0,0,255), 3); } cv::cvtColor(matOriginal, matOriginal, CV_BGR2RGB); QImage gimgOriginal((uchar*)matOriginal.data, matOriginal.cols, matOriginal.step, QImage::Format_RGB888); QImage gimgProcessed((uchar*)matProcessed.data, matProcessed.cols, matProcessed.step, QImage::Format_Indexed8); ui->IplOriginal->setPixmap(QPixmap::fromImage(gimgOriginal)); ui->IplProcessed->setPixmap(QPixmap::fromImage(gimgProcessed)); } void MainWindow::on_BtnPause_clicked() { if(tmrTimer->isActive() == true){ tmrTimer->stop(); ui->BtnPause->setText("Remuse"); } else { tmrTimer->start(20); ui->BtnPause->setText("pause"); } } В конце получаю очень много ошибок... из http://floomby.ru/s1/Car4dQ Подскажите в какую сторону копать... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 12, 2013 Может QTimer.h не хватает? У QT ведь на все свое Q Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 12, 2013 Таймер прошел Осталось дописать что б этого http://floomby.ru/s1/EarexZ избавиться Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 12, 2013 Похоже на ошибки линковки. Наверное что то не то с .lib-ами (или .a). Либы отладочные, а профиль программы какой? у меня вот такой вариант завалялся: QT += core gui TARGET = qt-opencv-multithreaded TEMPLATE = app VERSION = 1.21 DEFINES += APP_VERSION=$$VERSION FORMS = ImageProcessingSettingsDialog.ui CameraConnectDialog.ui MainWindow.ui SOURCES += main.cpp\ MainWindow.cpp \ CaptureThread.cpp \ Controller.cpp \ ImageBuffer.cpp \ CameraConnectDialog.cpp \ ProcessingThread.cpp \ FrameLabel.cpp \ MatToQImage.cpp \ ImageProcessingSettingsDialog.cpp HEADERS += MainWindow.h \ CaptureThread.h \ Controller.h \ ImageBuffer.h \ CameraConnectDialog.h \ ProcessingThread.h \ FrameLabel.h \ Structures.h \ Config.h \ MatToQImage.h \ ImageProcessingSettingsDialog.h LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann [/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 12, 2013 как я формировал либы: 1) скачал cmake 2) запустил, выбрал входную папку c:\openCV243, а выходную создал с именем C:\opencv243\pro 3) Configure указал MinGW Makefiles 4) указал пути компиляторов (в версии Qt 5.0.1 они лежат в папке tools\MinGW\bin) - использовал т.к. для этой версии нужен GCC версии > 4.6 (как я понял в тулсах лежит 4.7.3.2 версия) 5) нажал Finish 6) Установил отметку With_QT и переконфигурировал еще онин раз 7) Указал qmake из папки Qt (у меня он находится C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\) 8) переконфигурировал и сгенерировал 9) закрыл Cmake 10) запустил CMD меню 11) перешел в созданную в п.2 папку (cd C:\opencv243\pro) 12) прописал mingw32-make и ожидал конца формирования... (~10 мин) 13) по окончанию прописал mingw32-make install 14) прописал exit 15) поменял PATH на C:\openCV243\pro\install\bin\; C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\ 16) пробовал написать ПО... и вылезла ошибка приведенная выше... в каком из пуктов ошибся? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 12, 2013 Посмотрите тут (похожие проблемы): http://www.barbato.us/2010/09/20/using-opencv-within-qtcreator-in-windows/ http://tech.groups.yahoo.com/group/OpenCV/message/71034 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 13, 2013 Спасибо за ответы. Получилось построить проект без ошибок! Теперь другая проблема: При запуске програмы она сразу завершается ошибкой: Приложение остановлено, так как оно получило сигнал от опрационной системы. Сигнал: SIGSEGV Назначение: Segmentation fault Как с этим бороться? ЗЫ: отключение антивируса проблему не решает... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 13, 2013 программа валится тут: void OpenCV::on_btnShowImageFromCam_clicked() { if(camWebcam.isOpened() == false){ camWebcam.open(0); } else { camWebcam.read(matOriginal); } if (matOriginal.empty() == true) { return; } else { QImage qimgOrigimal((uchar*)matOriginal.data, matOriginal.cols, matOriginal.step, QImage::Format_RGB888); ui->IplImageOriginal->setPixmap(QPixmap::fromImage(qimgOrigimal)); } } точнее тут QImage qimgOrigimal((uchar*)matOriginal.data, matOriginal.cols, matOriginal.step, QImage::Format_RGB888); ui->IplImageOriginal->setPixmap(QPixmap::fromImage(qimgOrigimal)); написал программку для получения кадра с камеры(самую простую) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 13, 2013 Ты же размеры кадра неправильные передаёшь: ширину в пикселях и ширину в байтах. А высоту? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Argon 2 Жалоба Опубликовано March 13, 2013 Спасибо! Все заработало! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах