Компиляция OpenCV 4.1.0 в Windows для Qt 5.10

How-to по компиляции.

[tip] Проверено с OpenCV 4.1.0 и Qt 5.10 (только пути на свои замените).
[/tip]

Для начала, нам понадобиться:

  • OpenCV
  • CMake (Должен быть 32х битным, да же если система 64!)

Для удобства, основной путь у меня такой: E:\Projects\OpenCV  и в дальнейшем я отталкиваюсь именно от этой папки (В неё же и ставите OpenCV после скачивания).

Открываем консольку.

Должно скомпилироваться без проблем.

cd E:\Projects\OpenCV\opencv\build
set PATH=D:\Qt\5.10\mingw53_32\bin\;%PATH%
set PATH=D:\Qt\Tools\mingw530_32\bin\;%PATH%
cmake ../sources -G "MinGW Makefiles"  -DWITH_QT=ON -DWITH_QT_OPENGL=ON -DBUILD_EXAMLES=ON -DQT_QTCORE_LIBRARY_DEBUG="Qt5Cored.dll" -DQT_QTCORE_LIBRARY_RELEASE="Qt5Core.dll" -DQT_QMAKE_EXECUTABLE="qmake.exe" -DCMAKE_BUILD_TYPE=Release
mingw32-make -j4
mingw32-make install
[tip]Если нужны ещё и nonfree модули (например для SURF), то:
«git clone https://github.com/opencv/opencv_contrib ../opencv_contrib»
и к cmake добавить параметр: «-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules» и «-DOPENCV_ENABLE_NONFREE:BOOL=ON»
Если какой-то из модулей начнёт ебать мозг, то его можно отключить дополнительным параметром к cmake: «-DBUILD_opencv_modulename=OFF»
Мне пришлось отключить:
-DWITH_OPENCL_D3D11_NV=OFF
Так как мне он не нужен вовсе и были какие-то проблемы (заголовочников не было, скорее всего).[/tip] [tip]j4 — количество ядер в проце, чтобы быстрее компилилось.
После изменения параметров cmake необходимо из директории удалить файл CMakeCache.txt[/tip] [warning]MinGW необходимо использовать тот, который или идёт с Qt или тем, которым эти исходники уже компилировали!
Соответственно нужно заменить все пути на свои. И в выводе CMake убедитесь, что используется от Qt.[/warning] [warning]UPDT: OpenCV 3.0
Если во время сборки mingw32-make ругнётся на отсутствие -lRunTmChk  то cmake нужно перезапустить с флагом «-DWITH_IPP=OFF»[/warning] [warning]Если будет ругаться » error: base class ‘s
truct IUnknown’ has accessible non-virtual destructor [-Werror=non-virtual-dtor]»
то идём в папку с opencv d:\projects\opencv\sources\cmake\ открываем OpenCVCompilerOptions.cmake
ищем строку add_extra_compiler_option(-Werror=non-virtual-dtor) и ставим перед ней «#»
перезапускаем cmake.[/warning] [warning]Если будет ругаться «windres.exe: unknown option —W» то выполните заново cmake с дополнительным параметром «-DENABLE_PRECOMPILED_HEADERS=OFF»[/warning] [warning] Если будут проблемы на шаге videoio, например «sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA» и похожие, то в файле «\sources\modules\videoio\src\cap_dshow.hpp» добавьте в самом начале «#define NO_DSHOW_STRSAFE«
[/warning]

На этом установка закончена =)

Теперь попробуем тестовый проектик сделать.

Создаём новый консольный проект.

В  .pro файл дописываем:

INCLUDEPATH += E:/Projects/OpenCV/opencv/build/install/include/
LIBS +=-L"E:/Projects/OpenCV/opencv/build/install/x86/mingw/lib/"
LIBS +=  \
-lopencv_core410 \
-lopencv_highgui410 \
-lopencv_imgproc410 \
-lopencv_photo410 \
-lopencv_imgcodecs410

В main.cpp пишем:

#include <iostream>;
#include <opencv2/opencv.hpp>;
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   namedWindow("My Image");
   Mat image = imread("K:/Projects/OpenCV HelloWorld/img.jpg");

   imshow("My Image", image);
   waitKey(5000);

    return 0;
}
[tip]Чуть не забыл, в системную переменную PATH добавьте путь: «E:/Projects/OpenCV/opencv/build/install/x86/mingw/bin»,
E:/Projects/OpenCV/opencv/build/install/x86/mingw/bin;%path%»
иначе проект не соберётся и ребутнуть комп, или в Qt в настройках проекта — переменных окружения добавить.[/tip] [tip]Если переходите с предыдущей версии OpenCV, то в 4.0 много изменений (ну, к примеру, наименование констант CV_BGR2GRAY теперь COLOR_BGR2GRAY), в общем документация тут: https://docs.opencv.org/[/tip]

Надеюсь, всё прошло удачно =) На этом, пока что, всё.

Related posts

QML Сделать задержку перед началом анимации

QtCreator не открывает диалог выбора файлов, проектов, не открывает проект

Сборка Qt 6.8 (Dev) из исходников в Docker контейнере (Linux)

12 комментариев

Ваня 4 ноября 2019 - 15:37
Есть только папка x64 в build
Ваня 4 ноября 2019 - 15:35
Проблема такая же как и у Zmeis. Нет папки install. Что делать?
noname 29 декабря 2018 - 18:27
Спасиб те, добрый человек!
Иван 21 января 2018 - 19:15
Еще одна поправка проверьте название папок mingw Так же пройдите по своему пути
Zmeis 3 февраля 2018 - 16:32
Вроде всё поставил, не собрались только питоновские библиотеки (две ошибки, одна по .pud, другая по самой сборке). Но библиотек по указанным адресам просто НЕТ. Есть папка lib в корневой OpenCV, но при попытке указать их, Qt упорно твердит, что не видит их. Папки install просто нет, в папке win-install нет подпапки x64 (хотя качал, казалось бы, именно её), в mingw в папке lib лежит CMake'вский файл и всё, папки bin там и в помине нет..
Pavelk 6 февраля 2018 - 2:06
А make install запускали? Посмотрите из вывода куда он кладёт файлы.
Иван 21 января 2018 - 19:12
спасибо огромное за инструкцию. Дано Qt 5.10.0 OpenCV 3.4.0 Найденные ошибки. 1. set PATH=D:\Qt\Tools\mingw492_32\bin\;%PATH% Вместо D указываем свой диск ( у меня С) 2. Аналогично 3. Пришлось использовать советы по внесению переменной ( а как это делается не расписано) cmake -G "MinGW Makefiles" -DWITH_QT=ON -DWITH_QT_OPENGL=ON (ВОТ СЮДА ВСТАВЛЯЕМ) -DBUILD_EXAMLES=ON 4. В про файле прописать - сменил 330 на 340 INCLUDEPATH += C:/Projects/OpenCV/install/include/ LIBS +=-L"C:/Projects/OpenCV/install/x86/mingw/lib/" LIBS += \ -lopencv_core340 \ -lopencv_highgui340 \ -lopencv_imgproc340 \ -lopencv_photo340 \ -lopencv_imgcodecs340 5. Добавляем переменную тоже учитывая разрядность и Ваш ЖД setx /M path "E:/Projects/OpenCV/OpenCV/install/x64/mingw/bin;%path%" Где Е - Ваш диск х86 или х64 разрядность (пройдите по указанному пути и сами увидите папку)
Незнакомец 10 января 2018 - 12:03
Спасибо, помогло!
key 2 февраля 2014 - 6:15
Доброго времени суток. Делал так, как вы описываете. Проект не запускается. D:\Programs\OpenCV\opencv_cmd\install\x64\mingw\bin\opencv_ffmpeg248_64.dll:-1: ошибка: file not recognized: File format not recognized Будьте добры, подскажите что это(понятно, что связано с x64разрядной ОС, которую я использую, вероятно на x86 машинах запустится) и как исправить.
Pavelk 22 марта 2014 - 3:05

Да, Вы правы, проблема с разрядностью скорее всего. 

Искать проблемы в связке Qt + CMake 

кстати в последний раз были порблемы с CMake, поэтому лучше использовать версию 2.8.12

 

Pavelk 11 января 2015 - 16:18

Сам столкнулся с этим - проблема в том, что mingw 32 битный а ffmpeg 64х 

Pavelk 11 января 2015 - 16:44

Обновил пост.

Add Comment