(我发誓这是我最后一次写Opencv的安装~_~)
Opencv的稳定版本和扩展版本是分开的,一般我们使用稳定版本就可以了,但是如果设计到人脸识别这些东西,那么就需要用到扩展版本。
各软件版本:
Opencv3.4.1
Opencv contrib 3.4.1
Cmake 3.16.0
VS 2019
首先必须安装VS,Cmake,这些不多说了。
然后下载Opencv3.4.1:官网链接:https://opencv.org/opencv-3-4-1.html
Opencv 3.4.1的扩展模块:https://github.com/opencv/opencv_contrib
注意这里contrib下载的版本在这里选择:
build是空文件夹,contrib下载的安装包解压在了sources文件夹下面(它也可以放在Sources并列位置)
路径如下:
这个时候开始配置,但是会出现错误:
错误一:OpenCV does not recognize MSVC_VERSION 1922
我们打开提示对应的Cmake文件,找到对应的位置。
if(MSVC_VERSION EQUAL 1400) set(OpenCV_RUNTIME vc8) elseif(MSVC_VERSION EQUAL 1500) set(OpenCV_RUNTIME vc9) elseif(MSVC_VERSION EQUAL 1600) set(OpenCV_RUNTIME vc10) elseif(MSVC_VERSION EQUAL 1700) set(OpenCV_RUNTIME vc11) elseif(MSVC_VERSION EQUAL 1800) set(OpenCV_RUNTIME vc12) elseif(MSVC_VERSION EQUAL 1900) 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 EQUAL 1500) set(OpenCV_RUNTIME vc9) elseif(MSVC_VERSION EQUAL 1600) set(OpenCV_RUNTIME vc10) elseif(MSVC_VERSION EQUAL 1700) set(OpenCV_RUNTIME vc11) elseif(MSVC_VERSION EQUAL 1800) set(OpenCV_RUNTIME vc12) elseif(MSVC_VERSION EQUAL 1900) set(OpenCV_RUNTIME vc14) #添加这两行,1922是错误提示的vs版本,vc16是对应的工具 elseif(MSVC_VERSION EQUAL 1910) set(OpenCV_RUNTIME vc15) elseif(MSVC_VERSION EQUAL 1922) 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
但是上面提供了链接:https://github.com/opencv/opencv_3rdparty/tree/contrib_face_alignment_20170818
我们下载下来,复制到下面这个文件夹(注意不同版本不一样,Opencv3.4.1是这样的)
我们可以看到里面已经有了一个文件,但是没有下载成功,我们把这个文件删除,并将复制过来的文件命名为截图里面的文件名。
勾选Build_opencv_world:(这个选项将所有的lib文件集合为一个.lib文件)
设置contrib文件路径:
设置安装路径(这个文件夹是最后使用的)
解决方案选择Release x64
解决方案里面选择ALL_BUILD,然后右键,选择生成,开始编译,大概半个小时到一个小时
单击INSTALL, 右键,选择“设为启动项目”
然后生成。所有文件被安装到install文件里面
在Path里面添加路径:
也就是install文件夹里面的bin文件夹
兴建一个工程,在里面兴建一个属性表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
重新覆盖即可
另外,各种输入的时候,路径不要有错误
原文:https://www.cnblogs.com/fantianliang/p/12709753.html