How-to по компиляции.
[tip] Проверено с OpenCV 4.1.0 и Qt 5.10 (только пути на свои замените).[/tip]
Для начала, нам понадобиться:
Для удобства, основной путь у меня такой: 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]
Надеюсь, всё прошло удачно =) На этом, пока что, всё.
12 комментариев
Есть только папка x64 в build
Проблема такая же как и у Zmeis. Нет папки install. Что делать?
Спасиб те, добрый человек!
Еще одна поправка проверьте название папок mingw
Так же пройдите по своему пути
Вроде всё поставил, не собрались только питоновские библиотеки (две ошибки, одна по .pud, другая по самой сборке). Но библиотек по указанным адресам просто НЕТ. Есть папка lib в корневой OpenCV, но при попытке указать их, Qt упорно твердит, что не видит их. Папки install просто нет, в папке win-install нет подпапки x64 (хотя качал, казалось бы, именно её), в mingw в папке lib лежит CMake’вский файл и всё, папки bin там и в помине нет..
А make install запускали? Посмотрите из вывода куда он кладёт файлы.
спасибо огромное за инструкцию.
Дано 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 разрядность (пройдите по указанному пути и сами увидите папку)
Спасибо, помогло!
Доброго времени суток. Делал так, как вы описываете. Проект не запускается. D:\Programs\OpenCV\opencv_cmd\install\x64\mingw\bin\opencv_ffmpeg248_64.dll:-1: ошибка: file not recognized: File format not recognized
Будьте добры, подскажите что это(понятно, что связано с x64разрядной ОС, которую я использую, вероятно на x86 машинах запустится) и как исправить.
Да, Вы правы, проблема с разрядностью скорее всего.
Искать проблемы в связке Qt + CMake
кстати в последний раз были порблемы с CMake, поэтому лучше использовать версию 2.8.12
Сам столкнулся с этим — проблема в том, что mingw 32 битный а ffmpeg 64х
Обновил пост.