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 комментариев
Да, Вы правы, проблема с разрядностью скорее всего.
Искать проблемы в связке Qt + CMake
кстати в последний раз были порблемы с CMake, поэтому лучше использовать версию 2.8.12
Сам столкнулся с этим - проблема в том, что mingw 32 битный а ffmpeg 64х
Обновил пост.