一、版本说明

(我发誓这是我最后一次写Opencv的安装~_~)

Opencv的稳定版本和扩展版本是分开的,一般我们使用稳定版本就可以了,但是如果设计到人脸识别这些东西,那么就需要用到扩展版本。

各软件版本:

Opencv3.4.1

Opencv contrib 3.4.1

Cmake  3.16.0

VS 2019

二、基础准备

首先必须安装VS,Cmake,这些不多说了。

注意这里contrib下载的版本在这里选择:

windows 安装编译好的opencv_html5lib模块安装

三、编译过程

1-这里我的文件夹如图:

windows 安装编译好的opencv_OpenCV_02

build是空文件夹,contrib下载的安装包解压在了sources文件夹下面(它也可以放在Sources并列位置)

2-打开Cmake

路径如下:

windows 安装编译好的opencv_d3_03

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是这样的)

windows 安装编译好的opencv_OpenCV_04

我们可以看到里面已经有了一个文件,但是没有下载成功,我们把这个文件删除,并将复制过来的文件命名为截图里面的文件名。

4-设置

勾选Build_opencv_world:(这个选项将所有的lib文件集合为一个.lib文件)

windows 安装编译好的opencv_html5lib模块安装_05

设置contrib文件路径:

windows 安装编译好的opencv_html5lib模块安装_06

设置安装路径(这个文件夹是最后使用的)

windows 安装编译好的opencv_d3_07

5-重新点击Configure,多点击几次,直到完全变白

6-点击Generate

7-点击OpenProject

三、VS编译

1-编译

解决方案选择Release x64

解决方案里面选择ALL_BUILD,然后右键,选择生成,开始编译,大概半个小时到一个小时

windows 安装编译好的opencv_解决方案_08

2-安装

单击INSTALL, 右键,选择“设为启动项目”

然后生成。所有文件被安装到install文件里面

四、配置环境变量与属性

1-配置电脑系统变量

windows 安装编译好的opencv_d3_09

在Path里面添加路径:

windows 安装编译好的opencv_OpenCV_10

也就是install文件夹里面的bin文件夹

2-VS属性表配置

兴建一个工程,在里面兴建一个属性表Opencv

2.1  VC++目录

windows 安装编译好的opencv_html5lib模块安装_11

在包含目录里面添加:

windows 安装编译好的opencv_html5lib模块安装_12

库目录里面添加(都是Install文件夹里面的):

windows 安装编译好的opencv_OpenCV_13

2.2 C/C++->常规->附加包含目录:

windows 安装编译好的opencv_解决方案_14

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

重新覆盖即可

另外,各种输入的时候,路径不要有错误