1 前言
在使用OpenCV编写人脸识别测试程序时,碰到一个问题,无法打开人脸头文件。"fatal error C1083: 无法打开包括文件: “opencv2/face.hpp”: No such file or directory"。
刚开始以为工程头文件包含路径没配置完整,于是到OpenCV安装路径瞄了下,没有face.hpp呀???
莫非下载的安装包有问题?搜索后才得知,原来从官网下载的安装包opencv-4.6.0-vc14_vc15.exe,是不包含opencv_contrib模块的,而我要引用的face.hpp,恰好就在opencv_contrib中。之前通过安装包安装的OPenCV,如果用C++实现人脸识别功能,是不能用的。需要用CMake对OPenCV4.6.0和opencv_contrib-4.6.0(contrib模块版本要与OpenCV版本一致,因为OPenCV用的是4.6.0)源码进行编译,生成新的库文件和头文件。
2 准备工作
编译环境:Win10 64位系统 + CMake 3.21.0 + OpenCV4.6.0 + contrib4.6.0 + VS2022
注意:笔者这里用的Cmake版本是3.21.0,请使用这个版本或比这个版本高的Cmake,否则Cmake编译过程可能报错。
OPenCV源码上次已经下载过了,没有contrib源码,其下载地址
GitHub - opencv/opencv_contrib at 4.6.0
或者
Gitee 极速下载/opencv_contrib - Gitee.com
github下载速度比较慢,建议从gitee下载,速度快。
将opencv-4.6.0.zip和opencv_contrib-4.6.0.zip放到一个单独文件夹解压,并新建文件夹build(camke编译源码使用)。示例路径是G:\opencv4.6.0\build,您可以根据自己情况创建路径。
3 CMake编译
打开CMake-GUI,设置相关路径如截图
点击“Configure”按钮,然后选择MSVC编译选项,Visual Studio 17 2022,x64位编译(如果您电脑安装的是2019或其它版本,那就选择2019,也可以)
点击“Finish”按钮,开始配置。第一次Configure完之后,一堆红色区域,别急
在“Search”框中输入extra,搜索扩展模块配置项,填入contrib模块的modules路径,如截图,笔者电脑上是G:\opencv4.6.0\opencv_contrib-4.6.0\modules
在“Search”中输入world,找到编译选项BUILD_opencv_world
该选项默认没勾选,编译源码时,会生成opencv所有子模块的lib文件,一大堆,开发引用库文件时,很不方便。强烈推荐勾选该选项。这样编译源码后,就可以用一个opencv_world的lib文件代替所有的lib了。
下边是没勾选BUILD_opencv_world,编译源码生成的lib文件截图(看着头大)
在“Search”中输入examples,勾选编译示例代码
配置好上边几个编译选项后,重新点击“Configure”进行配置,操作两三次后,红色区域神奇消失,cmake最下边显示“Configuring done”,表示配置完成。
此时点击“Generate”按钮,生成MSVC工程文件。至此CMake编译结束,下边就可以使用Visual Studio打开OpenCV工程代码,进行编译了。
4 VS编译生成
下边编译步骤比较简单,编译过程会花费些时间,笔者电脑上完成编译花费了1个多小时。
在路径G:\opencv4.6.0\build,点击OpenCV.sln打开工程
点击CMakeTargets,选择ALL_BUILD,分别使用Debug x64和Release x64模式,生成OpenCV对应的库文件
Debug x64
Release x64
5 安装
接下来可以运行INSTALL程序,安装头文件,库文件等文件
笔者电脑安装路径G:\opencv4.6.0\build\install
到include目录中看看,face.hpp文件便有了哈:)
笔者已将编译好的安装包文件上传至Opencv4.6.0+contrib4.6.0安装包,如果您觉得自己编译麻烦,也可以从这里下载直接使用。