OpenCV 4.3.0 源代码编译(Win10 + MinGW64)

想测试一下Python OpenCV 中的 cv2.xphoto.bm3dDenoising,谁知道这玩意儿是 Nonfree的,opencv-python 里没有这个包,卸载 opencv-python,安装 opencv-contrib-python 还是不行,只有空的接口,没有实现。只好自己下载源代码编译了。我不想装 Visual Studio,太庞大,就用电脑上的 MinGW64 吧。

1、在github下载opencv-4.3.0 源代码及 contrib 源代码,分别解压;

2、创建 opencv-build 目录,和 opencv-4.3.0 源代码目录并列即可。因为opencv 不能在源代码目录编译,怕搞乱了;

3、运行cmd,打开命令行窗口,cd 到 opencv-build 目录下,执行 cmake:

cmake -G "MinGW Makefiles" \
  -DCMAKE_BUILD_TYPE=RELEASE \
  -DOPENCV_ENABLE_ALLOCATOR_STATS=OFF \
  -DOPENCV_ENABLE_NONFREE=ON \
  -DPYTHON2_EXECUTABLE=C:\Python27\python.exe 
  -DOPENCV_EXTRA_MODULES_PATH=..\opencv_contrib-4.3.0\modules \
  ..\opencv-4.3.0

注意:上面的命令行,为了易读,我写成了多行,要用 Unix 换行格式(\n),用Windows的换行格式(\r\n)会报错。如果遇到命令行报错,老老实实改写成一行就没有问题了。

解释一下:

  • -G "MinGW Makefiles" 生成 MinGW的Makefiles
  • -DOPENCV_ENABLE_ALLOCATOR_STATS=OFF   解决 ...opencv_core.dir/vs_version.rc.obj gcc: error: long: No such file or directory 报错
  • -DOPENCV_ENABLE_NONFREE=ON 编译 Nonfree 部分的代码
  • -DPYTHON2_EXECUTABLE=C:\Python27\python.exe 给出Python2 的命令位置
  • -DOPENCV_EXTRA_MODULES_PATH=..\opencv_contrib-4.3.0\modules 附加源代码模块的存放位置
  • ..\opencv-4.3.0 是opencv源代码目录

4、cmake 配置完成后,执行 make  -j12  开启 12个 job 进行构建,把 CPU用满,十来分钟,构建完成。

5、make install 进行安装, opencv python 会安装到 python27目录下。

6、在pycharm 里面测试,1600万像素的一幅图像,opencv bm3d去噪花了 756秒。 和 http://www.cs.tut.fi/~foi/GCF-BM3D/的bm3d 3.0.6对比,后者耗时1700秒,opencv还是要快一些。话说回来,这两个都很慢。默认编译情况下, opencv的bm3d 感觉只是单核上跑, 在6核 i5 9400F电脑上,CPU占用只有大约 25%,多核CPU没有使用,RTX2070S GPU也没有使用。

 

遇到的错误:

1、本来只想编译 Python3 的opencv库,毕竟 python2 都淘汰了。结果,我 的Anaconda base环境 python3, 要么cmake配置报错,要么编译通不过。从cmake脚本或者命令行屏蔽 python2,打开 python3 ,cmake配置通过了,最后遇到了  python3.lib 有 '\P' 或者 '\M' 字符不认识的问题,解决不了。我不就是想评估一下 BM3D 嘛,Python2 的版本也可以啊,我投降 : (。

2、编译完成,最后链接时遇到 opencv undefined reference to `__imp_Py_InitModule4' 的问题,按照网上的办法,添加-DMS_WIN64。我在  opencv-4.3.0\cmake\OpenCVCompilerOptions.cmake 中,找个合适的位置,添加    add_extra_compiler_option(-DMS_WIN64)。链接成功

 

其他:

opencv 的编译选项很多, 用 cmake-gui 可以列出来。

 

你可能感兴趣的:(OpenCV 4.3.0 源代码编译(Win10 + MinGW64))