Windows平台下OpenCV源码编译

1 准备工作:

1.1 Cmake安装

已下载,可以参考[1]链接;

1.2 opencv下载

1)官网下载:https://opencv.org/releases/
选择版本:3.4.6–Sources

2)github下载:https://github.com/opencv/opencv/tree/3.4.6
选择版本:Switch branches or tags按钮–Tags–3.4.6;
可以通过opencv官网,进入github下载网址;

2 OpenCV编译

2.1 编译32位Debug

1)解压opencv包,在opencv-3.4.6目录下新建build文件夹(与include平行目录);

2)cmd窗口中输入cmake-gui,打开cmake;

3)在cmake键面中“source code”输入: F:/opencv346s/opencv-3.4.6/opencv-3.4.6,“build the binaries”输入: F:/opencv346s/opencv-3.4.6/opencv-3.4.6/build;

4)点击Configure,根据VS版本选择:VS15 2017,platform:Win32, Use default native compliers,配置过程可能会出现一些警告(参考[2])可以忽略不用管,有些库是不需要使用的,如果需要用,则要针对这些错误进行配置。

5)Configure完成后,会出现一些红色的区域,勾选进行配置;
去掉勾:BUILD_TESTS、BUILD_opencv_ts、BUILD_opencv_python3、BUILD_opencv_python_bindings_generator
勾选:BUILD_opencv_world

6)配置完成后,再次点击configure,configuring done完成后,红色区域全部变成白色后(如果还有红色区域,需要再配置),点击Generate按钮生成,Generating done。

7)点击Open Project打开工程(或双击F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\OpenCV.sln),配置Debug win32,找到CMake Targets – ALL_BUILD – 生成/重新生成,过10分钟左右,出现“全部重新生成: 成功 23 个,失败 0 个,跳过 0 个”即编译成功,可以在“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\lib\Debug”路径下找到opencv_world346d.lib文件。如果出现失败,找到对应的原因,如果不影响opencv_world346d.lib的生成,可以忽略。

8)找到CMake Targets – INSTALL – 生成/重新生成,出现“全部重新生成: 成功 24 个,失败 0 个,跳过 0 个”即编译成功。在“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\include”文件夹下面会出现opencv和opencv2两个文件夹。步骤7)中的lib库也会在此生成“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\x86\vc15\lib\opencv_world346d.lib”

9)到此,OpenCV源码编译完成,但是还有一个问题。新建项目,配置debug win32、包含目录、库目录、连接器输入,运行下面代码测试;

#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    
    
	cv::Mat s = cv::imread("test.bmp", 1);
	cv::imshow("11", s);
	cv::waitKey(0);
}

此时会报错:“应用程序无法正常启动0xc000007b解决方案”,打开.sln所在平行目录下Debug文件夹,将“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\x86\vc15\bin”目录下的opencv_world346d.dll拷贝到Debug文件夹下。再次生成、运行成功显示图像。
注意:
如若不想每个工程都这样拷贝一次,可以将opencv_world341d.dll文件拷贝到C:\Windows\SysWOW64这个文件夹里面即可。

2.2 编译32位Release

将2.1步骤7中,配置Debug win32改为配置Release Win32,其他步骤一致。
可以在同一个build文件夹下执行重新生成操作:

生成opencv_world346.lib库在“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\x86\vc15\lib”,此时有opencv_world346.lib和opencv_world346d.lib;

生成头文件include在“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\include”;

生成dll在“F:\opencv346s\opencv-3.4.6\opencv-3.4.6\build\install\x86\vc15\bin”,此时有opencv_world346.dll和opencv_world346d.dll。

2.3 编译64位Debug

将2.1步骤4中platform:Win32改为x64;其他步骤不变。

2.4 编译64位Release

将2.1步骤4中platform:Win32改为x64,步骤7中的配置Debug win32改为配置Release Win32;其他步骤不变。

3 参考

[1] Windows下 Cmake + VS 编译 OpenCV (+ opencv_contribute)源码
[2] warning:

CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
  IPPICV: Download failed: 6;"Couldn't resolve host name"

  For details please refer to the download log file:

  F:/opencv346s/opencv-3.4.6/opencv-3.4.6/build/CMakeDownloadLog.txt

Call Stack (most recent call first):
  3rdparty/ippicv/ippicv.cmake:42 (ocv_download)
  cmake/OpenCVFindIPP.cmake:243 (download_ippicv)
  cmake/OpenCVFindLibsPerf.cmake:12 (include)
  CMakeLists.txt:794 (include)

打开“ F:/opencv346s/opencv-3.4.6/opencv-3.4.6/build/CMakeDownloadLog.txt”这个文件,问题是由于该文件中以此链接开头的https://raw.githubusercontent.com/下载路径都需要外网下载,所以在configure和generate的过程中,需要连接上外网。如果不成功可以在上外网上下载下来,放到指定位置。

CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):
  CMake's 'find_host_package(PythonInterp 2.7)' founds wrong Python version:

  PYTHON_EXECUTABLE=E:/anaconda/python.exe

  PYTHON_VERSION_STRING=3.7

  Consider specify 'PYTHON2_EXECUTABLE' variable via CMake command line or
  environment variables

Call Stack (most recent call first):
  cmake/OpenCVDetectPython.cmake:275 (find_python)
  CMakeLists.txt:710 (include)

可以忽略此警告,在configure时,去掉python相关的配置,可消除警告。

猜你喜欢

转载自blog.csdn.net/weixin_41874898/article/details/116268210