QT with OpenCV
OpenCV 官方发布 默认是使用MSVC编译的库, QT如果是使用mingw编译器是无法使用的. 要想使用,必须本地使用 mingw编译Opencv的源码
这里使用 cmake 用QT使用的mingw32位编译器, 本地编译OpenCV的源码
-cmake CMake是一个跨平台的安装(编译)工具, 可以用简单的语句来描述所有平台的安装(编译过程);
CMake 可以编译源代码, 制作程序库, 产生适配器(wrapper), 还可以用任意的顺序建构执行档; CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里), 因此可以很容易从同一个源代码目录树中建构出多个二进档; CMake 也支持静态与动态程式库的建构;
-OpenCV
这个安装好后
./build 官方编译好后供各种第三方使用的库. 有java,python… 当然还有c++基于MSVC编译的..
./sources 是它的源码
OpenCV github 发布页 OpenCV官方发布页 OpenCV官方文档页
OpenCV4 源码编译记录
使用cmake 编译OpenCV 的过程记录, 麻烦的一批
运行cmake的 cmake-gui.exe
where is the source code → 选择 opencv的源代码文件夹即./sources
where to build the binaries → 选择 编译后的输出二进制文件夹(随便建一个吧)
主界面 configure 按钮
- 先规定本地编译器
选择 specify native compilers 单选框 → finsh
参考qt的编译器配置
d:\Qt\Qt5.12.3\Tools\mingw730_32\bin\g++.exe其中 c 文件名是gcc.exe, c++ 的文件名是g++.exe, 还一个不管
- specify the generator for this project
选择 MinGW Makefiles
finsh
- 搜索 CMAKE_MAKE_PROGRAM
填入mingw32-make.exe 的地址,在mingw编译器的bin目录
- CMAKE_BUILD_TYPE
填入Release, 即生成发布版
- 最后Configure
报错: 缺少libwinpthread-1.dll, 搜了一下在mingw编译器的bin目录, 把编译器的路径加到环境变量D:\Qt\Qt5.12.3\Tools\mingw730_32\bin
5.1 再Configure
还报错: 什么opencv_ffmpeg.dll下载失败…
又**是gfw问题, 调全局. 再来
finally ok !
大概输出如下:
General configuration for OpenCV 4.1.0 =====================================
Version control: unknown
Platform:
Timestamp: 2019-06-01T15:54:48Z
Host: Windows 10.0.14393 AMD64
CMake: 3.14.5
CMake generator: MinGW Makefiles
CMake build tool: D:/Qt/Qt5.12.3/Tools/mingw730_32/bin/mingw32-make.exe
Configuration: Releas
CPU/HW features:
Baseline: SSE SSE2
requested: SSE2
Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX
requested: SSE4_1 SSE4_2 AVX FP16
SSE4_1 (16 files): + SSE3 SSSE3 SSE4_1
SSE4_2 (2 files): + SSE3 SSSE3 SSE4_1 POPCNT SSE4_2
FP16 (1 files): + SSE3 SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
AVX (5 files): + SSE3 SSSE3 SSE4_1 POPCNT SSE4_2 AVX
.....
OpenCV modules:
To be built: calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo stitching ts video videoio
Disabled: world
Disabled by dependency: -
Unavailable: java js python2 python3
Applications: tests perf_tests apps
Documentation: NO
Non-free algorithms: NO
Windows RT support: NO
GUI:
Win32 UI: YES
VTK support: NO
....
Trace: YES (built-in)
Other third-party libraries:
Lapack: NO
Eigen: NO
Custom HAL: NO
Protobuf: build (3.5.1)
OpenCL: YES (NVD3D11)
Include path: D:/opencv410/sources/3rdparty/include/opencl/1.2
Link libraries: Dynamic load
Python (for build): NO
Java:
ant: NO
JNI: C:/Program Files/Java/jdk1.8.0_161/include C:/Program Files/Java/jdk1.8.0_161/include/win32 C:/Program Files/Java/jdk1.8.0_161/include
Java wrappers: NO
Java tests: NO
Install to: D:/opencv410/ck_build/install
-----------------------------------------------------------------
Configuring done预防一下
CMakeDownloadLog.txt 文件记录有下载
很显然下载后放.cache下对应的地方, 然后改其名字为MD值+’-‘+下载的文件名; 比如opencv_ffmpeg.dll这个文件下载后凡在.cache下的ffmpeg下, 然后改名为b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll替换原来0KB的那个文件; 参考
- 执行mingw32-make
cd 到刚刚输出目录,执行mingw32-make(在mingw编译器的bin目录,上面加到环境变量里面了)
报错: Makefile 文件没找到
最后原因还是上面opencv_ffmpeg.dll下载失败的问题, 手动下载替换之.
再执行mingw32-make
漫漫长夜…
最后
[100%] Building CXX object modules/CMakeFiles/ade.dir/__/3rdparty/ade/ade-0.1.1d/sources/ade/source/topological_sort.cpp.obj
[100%] Linking CXX static library ..\lib\libade.a
[100%] Built target ade
最最后
执行: mingw32-make istall
报错: mingw32-make:*** No rule to make target 'istall'. Stop.
再链接一遍执行mingw32-make
再再执行: mingw32-make istall
没有生成 dll? 回到Configuring, 勾选 WITH_OPENGL .. 再走一遍
漫漫长夜…
另使用mingw32-make -j 8 可以8线程编译
Scanning dependencies of target opencv_version
[100%] Building CXX object apps/version/CMakeFiles/opencv_version.dir/opencv_version.cpp.obj
[100%] Linking CXX executable ..\..\bin\opencv_version.exe
[100%`] Built target opencv_version
完成后再重复执行mingw32-make 和 mingw32-make istall
啊~~, 编译后的库文件
D:\opencv410\ck_build\install\x86\mingw\lib 库文件夹下的库, 分为发布版本和调试版本(带d)
和D:\opencv410\ck_build\install\x86\mingw\bin 目录是运行库(DLL)
[使用mingw530_32编译openCV3.4.1源码, 搭建Qt5.9.3的openCV开发环境]https://blog.csdn.net/qq21497936/article/details/79641510 [OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行]https://blog.csdn.net/huihut/article/details/78701814 OpenCV使用CMake和MinGW-w64的编译安装
错误: error: 'D3D11_TEXTURE2D_DESC' was not declared in this scope
不勾选 WITH_OPENCL_D3D11_NV 即可
测试
类似ffmpeg.. 右键项目 → Add Library → External Library →next
平台只选windows Library file 随便选择一个lib, 真** 只能单个添加 (后面的手动编辑.pro文件 添加) Include path 即头文件(D:/opencv410/ck_build/install/include)
最后再手动改,把其他库加进来
win32: LIBS += -LD:/opencv410/ck_build/install/x86/mingw/lib/ \
-llibopencv_core410.dll \
-llibopencv_calib3d410.dll \
-llibopencv_dnn410.dll \
-llibopencv_features2d410.dll \
-llibopencv_flann410.dll \
-llibopencv_gapi410.dll \
-llibopencv_highgui410.dll \
-llibopencv_imgcodecs410.dll \
-llibopencv_imgproc410.dll \
-llibopencv_ml410.dll \
-llibopencv_objdetect410.dll \
-llibopencv_photo410.dll \
-llibopencv_stitching410.dll \
-llibopencv_video410.dll \
-llibopencv_videoio410.dll \
INCLUDEPATH += D:/opencv410/ck_build/install/include
DEPENDPATH += D:/opencv410/ck_build/install/include-测试代码
using namespace cv;
int main(int argc, char *argv[])
{
Mat image;
image = imread("f:/test/test.jpg");
imshow("opencv_win", image);
waitKey(0);
// QCoreApplication a(argc, argv);
// return a.exec();
return 0;
}
运行报错, 因为没有运行库, 把D:\opencv410\ck_build\install\x86\mingw\bin目录的所有dll复制到qt编译输出目录
注意, 源码mingw编译的lib库, 和QT项目使用的mingw 版本要一至?
漫漫长征路…