一、版本说明
(我发誓这是我最后一次写Opencv的安装~_~)
Opencv的稳定版本和扩展版本是分开的,一般我们使用稳定版本就可以了,但是如果设计到人脸识别这些东西,那么就需要用到扩展版本。
各软件版本:
Opencv3.4.1
Opencv contrib 3.4.1
Cmake 3.16.0
VS 2019
二、基础准备
首先必须安装VS,Cmake,这些不多说了。
注意这里contrib下载的版本在这里选择:
三、编译过程
1-这里我的文件夹如图:
build是空文件夹,contrib下载的安装包解压在了sources文件夹下面(它也可以放在Sources并列位置)
2-打开Cmake
路径如下:
3-点击Configure
这个时候开始配置,但是会出现错误:
错误一:OpenCV does not recognize MSVC_VERSION 1922
我们打开提示对应的Cmake文件,找到对应的位置。
if(MSVC_VERSION EQUAL 1400)set(OpenCV_RUNTIME vc8)
elseif(MSVC_VERSION EQUAL1500)set(OpenCV_RUNTIME vc9)
elseif(MSVC_VERSION EQUAL1600)set(OpenCV_RUNTIME vc10)
elseif(MSVC_VERSION EQUAL1700)set(OpenCV_RUNTIME vc11)
elseif(MSVC_VERSION EQUAL1800)set(OpenCV_RUNTIME vc12)
elseif(MSVC_VERSION EQUAL1900)set(OpenCV_RUNTIME vc14)
elseif(MSVC_VERSION MATCHES"^191[0-9]$")set(OpenCV_RUNTIME vc15)
可以看到,由于使用的vs2019,对应版本是1922,所以这里无法识别,
这个时候我们修改如下(大家根据自己的VS对应的版本去添加,一般来说VS2019-vc16, vs2017-vc15):
if(MSVC_VERSION EQUAL 1400)set(OpenCV_RUNTIME vc8)
elseif(MSVC_VERSION EQUAL1500)set(OpenCV_RUNTIME vc9)
elseif(MSVC_VERSION EQUAL1600)set(OpenCV_RUNTIME vc10)
elseif(MSVC_VERSION EQUAL1700)set(OpenCV_RUNTIME vc11)
elseif(MSVC_VERSION EQUAL1800)set(OpenCV_RUNTIME vc12)
elseif(MSVC_VERSION EQUAL1900)set(OpenCV_RUNTIME vc14)
#添加这两行,1922是错误提示的vs版本,vc16是对应的工具
elseif(MSVC_VERSION EQUAL1910)set(OpenCV_RUNTIME vc15)
elseif(MSVC_VERSION EQUAL1922)set(OpenCV_RUNTIME vc16)
elseif(MSVC_VERSION MATCHES"^191[0-9]$")set(OpenCV_RUNTIME vc15)
错误二:WARNING "Face: Can‘t get model file for face alignment."
这个时候我们找到对应的cmakelists部分:
set(__commit_hash "8afa57abc8229d611c4937165d20e2a2d9fc5a12")set(__file_hash "7505c44ca4eb54b4ab1e4777cb96ac05")
ocv_download(
FILENAME face_landmark_model.dat
HASH ${__file_hash}
URL"${OPENCV_FACE_ALIGNMENT_URL}"
"$ENV{OPENCV_FACE_ALIGNMENT_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"DESTINATION_DIR"${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}/cv/face/"ID"data"RELATIVE_URL
STATUS res
)if(NOT res)
message(WARNING"Face: Can‘t get model file for face alignment.")
endif()
发现是其中的数据无法下载:face_landmark_model.dat
我们下载下来,复制到下面这个文件夹(注意不同版本不一样,Opencv3.4.1是这样的)
我们可以看到里面已经有了一个文件,但是没有下载成功,我们把这个文件删除,并将复制过来的文件命名为截图里面的文件名。
4-设置
勾选Build_opencv_world:(这个选项将所有的lib文件集合为一个.lib文件)
设置contrib文件路径:
设置安装路径(这个文件夹是最后使用的)
5-重新点击Configure,多点击几次,直到完全变白
6-点击Generate
7-点击OpenProject
三、VS编译
1-编译
解决方案选择Release x64
解决方案里面选择ALL_BUILD,然后右键,选择生成,开始编译,大概半个小时到一个小时
2-安装
单击INSTALL, 右键,选择“设为启动项目”
然后生成。所有文件被安装到install文件里面
四、配置环境变量与属性
1-配置电脑系统变量
在Path里面添加路径:
也就是install文件夹里面的bin文件夹
2-VS属性表配置
兴建一个工程,在里面兴建一个属性表Opencv
2.1 VC++目录
在包含目录里面添加:
库目录里面添加(都是Install文件夹里面的):
2.2 C/C++->常规->附加包含目录:
2.3 链接器->输入->附加依赖项
opencv_world341.lib
opencv_img_hash341.lib
注意上面我只是编译安装了Release x64版本的,所以只有opencv_world341.lib,而没有出现opencv_world341d.lib,如果需要可以自己再次配置安装。
至此安装完成
五参考链接
有一部分忘记了。
六、问题补充
我最开始的时候只是安装了Opencv没有安装扩展部分,当再次编译安装的时候,出来问题:
无法定位程序输入点于动态链接库
这个时候是因为原来的 opencv_world341.dll程序没有被覆盖,所以我们需要找到新生成的opencv_world341(install/bin文件夹里面),复制到:
C:\Windows\System32
重新覆盖即可
另外,各种输入的时候,路径不要有错误