Перейти к содержимому
Compvision.ru
FAA

OpenCV + Qt

Recommended Posts

Доброго времени суток!

Решил попробовать связку OpenCV + Qt(до этого использовал MSVС 2010).

При использовании "старых" .lib-файлов возникает проблема: ":-1: ошибка: LNK1104: cannot open file 'opencv_core246.lib.lib'"

pro-файл:


QT       += core


QT       -= gui


TARGET = QtOpenCVTemp

CONFIG   += console

CONFIG   -= app_bundle


TEMPLATE = app



SOURCES += main.cpp


LIBS += -LD:/Qt/Qt5.1.0/Tools/QtOpenCVLib/lib/ \

-lopencv_core246.lib \

-lopencv_imgproc246.lib \

-lopencv_highgui246.lib \

-lopencv_ml246.lib \

-lopencv_video246.lib \

-lopencv_features2d246.lib \

-lopencv_calib3d246.lib \

-lopencv_objdetect246.lib \

-lopencv_contrib246.lib \

-lopencv_legacy246.lib \

-lopencv_flann246.lib


хотелось бы узнать: возможно ли использование pre-compiled .lib-файлов с Qt и в чем может быть проблема, или необходимо вручную собирать с помощью CMake ? Заранее спасибо! Update1: Сейчас попробовал вообще убрать раздел LIBS из pro-файла, ошибка осталась прежней. main.cpp:

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>


using namespace std;

using namespace cv;


int main() {


    Mat image = imread("img.jpg");

    namedWindow("My Image");

    imshow("My Image", image);

    waitKey(5000);


    return 0;

}


  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может .lib лишнее в opencv_core246.lib.lib ?

И тут указывать -lopencv_core246 ?

Qt давно не использовал не помню, но по логике выдаваемых ошибок это так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может .lib лишнее в opencv_core246.lib.lib ?

И тут указывать -lopencv_core246 ?

Qt давно не использовал не помню.

Не помогает. Да я уже по-разному пробовал, и напрямую каждую прописывать. Самое интересное, что когда вообще убираешь, ошибка остается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По этому руководству настраивали?

http://www.troyashka.ru/2011/05/qtvs2010opencv.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По этому руководству настраивали?

http://www.troyashka.ru/2011/05/qtvs2010opencv.html

Нет. Я вообще просто посмотрел как header- и lib- файлы подключать к Qt и все.

Сам Cmake-ом не собирал, скачал отсюда http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.6/OpenCV-2.4.6.0.exe/download когда настраивал под MSVC 2010.

Сейчас использовал эти же файлы. Может как раз дело в том, что надо обязательно самому с опцией WITH_QT скомпилировать ?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Перекомпиляция решила проблему. С трудом, но собралась OpenCV. Пришлось удалить часть cmake- файла где подключались библиотеки расширений. В итоге с warning-ами собралось, но вроде работает. Спасибо за оперативный ответ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток!

Появилось новая проблема. Может что не так в использовании итераторов ?

cv::Mat_<uchar>::const_iterator it = binary.begin<uchar>();

в Qt:

Exception at 0x75d9b760, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) at d:\qt\qt5.1.0\tools\opencv-master\opencv-master\modules\core\src\system.cpp:521

в msvc10:

First-chance exception at 0x75d9b760 in Temp.exe: Microsoft C++ exception: cv::Exception at memory location 0x002bf0c4..

Unhandled exception at 0x75d9b760 in Temp.exe: Microsoft C++ exception: cv::Exception at memory location 0x002bf0c4..

The program '[4180] Temp.exe: Native' has exited with code -529697949 (0xe06d7363).

вот полный метод:


void drawOnImage(const cv::Mat &binary, cv::Mat &image) {

        cv::Mat_<uchar>::const_iterator it = binary.begin<uchar>();

        cv::Mat_<uchar>::const_iterator itend = binary.end<uchar>();


        for (int i = 0; it != itend; it++, ++i) {

            if (!*it) {

                cv::circle(image, cv::Point(i%image.step, i/image.step), 5, cv::Scalar(255, 0, 0));

            }

        }


    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Матрица binary объявлена как Mat(rows,cols,CV_8UC1) ?

Здесь есть примеры сканирования матриц: http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Матрица binary объявлена как Mat(rows,cols,CV_8UC1) ?

она получается в результате:

/...

cv::threshold(result, result, threshold, 255, cv::THRESH_BINARY_INV);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Из руководства

src – input array (single-channel, 8-bit or 32-bit floating point). dst – output array of the same size and type as src.
, а на входе пороговой функции не CV_32FC1 случаем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Матрица binary объявлена как Mat(rows,cols,CV_8UC1) ?

Здесь есть примеры сканирования матриц: http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html

я пробовал, как и в этом туториале через

cv::MatIterator_<uchar> it = binary.begin<uchar>();

cv::MatIterator_<uchar> itend = binary.end<uchar>();

все равно остается ошибка. Просто интересно, почему возникает, знаю, что можно написать через указатели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Из руководства , а на входе пороговой функции не CV_32FC1 случаем?

нет, CV_8UC3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так там же написано single-channel. Значит должно быть CV_8UC1?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так там же написано single-channel. Значит должно быть CV_8UC1?

да, прошу прощения, там все норм на входе CV_8UC1, преобразование делается. Падает именно на строке объявления итератора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, аналогичные явления наблюдал только когда к release проекту подключались debug библиотеки и наоборот.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, аналогичные явления наблюдал только когда к release проекту подключались debug библиотеки и наоборот.

хорошо, спасибо, еще посмотрю. Написал пока через указатели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×