前言
仅仅安装了OpenCV想学习人脸识别的时候就会出现些错误,在这里简单介绍一下:
使用最新版的OpenCV进行人脸识别会发现没有face.hpp这个文件,而有一些网上的讲解视频当使用==#include<opencv2/face.hpp>==时,我们却没有,因为最近实现人脸识别,由于采用的是opencv3,而opencv3的人脸识别库等contrib模块已经不再内置了。这也正是人脸识别等contrib模块没有放到主仓库的原因:不稳定,仍在开发中。。。
OpenCV在视觉算法中的功能非常强大,其中一个原因就是该算法库一直在与时俱进的更新最新的算法,对于具有专利的算法(如SURF)以及一些还没有稳定的算法,OpenCV会将其置于扩展模块中,这些扩展模块包含在opencv_contrib代码库中。对于稳定的算法,会被移到OpenCV主仓库代码中,因此读者需要谨慎的使用opencv_contrib,因为不同版本的函数可能存在差异。
在OpenCV 3.x版本之后,opencv_contrib就不再包含于OpenCV源码中,opencv_contrib的源码可以在Github上下载,然后参与OpenCV源码编译。
OpenCV_Contrib的模块及其功能如下:
- alphamat:Alpha Matting信息流算法;
- aruco:增强现实标记算法;
- barcode:条形码检测与解码方法;
- bgsegm:增强背景-前景分割算法;
- bioinspired:仿生学视觉模型和衍生工具;
- ccalib:用于三维重建的自定义校准模式;
- cudaarithm:CUDA矩阵运算;
- cudabgsegm:CUDA背景分割;
- cudacodec:CUDA视频编解码;
- cudafeatures2d:CUDA特征检测与描述;
- cudafilters:CUDA图像滤波;
- cudaimgproc:CUDA图像处理;
- cudalegacy:CUDA传统支持;
- cudaobjdetect:CUDA目标检测;
- cudaoptflow:CUDA光流算法;
- cudastereo:CUDA立体匹配;
- cudawarping:CUDA图像扭曲;
- cudev:CUDA设备层;
- cvv:计算机视觉程序交互式可视化调试的GUI;
- datasets:用于处理不同数据集的框架;
- dnn_objdetect:基于DNN的目标检测;
- dnn_superres:基于DNN的超分;
- dpm:基于可变形零件的模型;
- face:人脸分析;
- freetype:使用freetype/harfbuzz绘制UTF-8字符串;
- fuzzy:基于模糊数学的图像处理;
- hdf:分层数据格式I/O例程;
- hfs:基于层次特征选择的图像分割方法;
- img_hash:该模块提供了不同的图像哈希算法的实现;
- intensity_transform:该模块提供了用于调整图像对比度的强度变换算法的实现;
- julia:OpenCV Julia绑定;
- line_descriptor:用于从图像中提取线条的二进制描述符;
- mcc:Macbeth图表模块;
- optflow:光流算法;
- ovis:OGRE三维可视化器;
- phase_unwrapping:相位展开API;
- plot:Mat数据绘制函数;
- quality:图像质量分析API;
- rapid:基于轮廓的三维目标跟踪;
- reg:图像配准;
- rgbd:RGB深度处理;
- saliency:显著性API;
- sfm:运动结构分析;
- shape:形状距离与匹配;
- stereo:立体匹配算法;
- structured_light:结构光API;
- superres:超分模块;
- surface_matching:曲面匹配;
- text:场景文字检测与识别;
- tracking:追踪API;
- videostab:视频稳定;
- viz:三维可视化器;
- wechat_qrcode:微信二维码检测器,用于检测和解析二维码;
- xfeatures2d:features2d扩展模块;
- ximgproc:imgproc扩展模块;
- xobjdetect:objdetect扩展模块;
- xphoto:photo扩展模块
1、准备
从opencv3开始,将 face、sift、surf 等函数相关的库单独拎出来了,若要使用需配置contrib包。本文介绍了如何在 windows 中配置contrib+opencv。所用版本为opencv3.4.16 + contrib3.4.16,操作系统为win10,win11均测试过可行。
配置 contri b前我已完整配置过opencv,如果已配置过 opencv,在设置路径相关参数时,需要注意调整一下;
1 下载
从最大的同性交友网站上下载opencv和opencv_contrib。均为官方发布的。opencv和opencv_contrib的版本一定要一一致
- opencv: https://github.com/opencv/opencv/releases/tag/3.4.16 ,选择:
opencv-3.4.16-vc14_vc15.exe
进行下载 - opencv_contrib: https://github.com/opencv/opencv_contrib/releases/tag/3.4.16 ,选择:
Source code (zip)
进行下载
2、存放路径
将 opencv下载解压后放在 D:\cpp\opencv-3.4.16 目录
将 opencv_contrib 下载解压后放在 D:\cpp\opencv-3.4.16 目录
2、Configure
打开 CMake-gui ,选择好 opencv 的目录;先点一下 Configure
然后会多出来很多选项,找到 OPENCV_EXTRA_MODULES_PATH
,将其设为以下值,就是 contrib 的路径;
D:/cpp/opencv_contrib-3.4.16/modules
设置好路径之后,再点一下 Configure; 此时会重新生成
等他 done 之后又是一片红,再点一次configure,变成白色就完了
3、Generate
点击 Generate 按钮,此时会生成 makefile
4、编译
进入 D:/cpp/opencv-3.4.16/sources/build 目录,打开cmd窗口,输入以下命令进行编译,等他走到 100% 就完成了,比较费时间,耐心等待。。。
# 正常情况下啊windows的编译是这个命令,但是我的修改过,改为了 mingw32-make-posix
mingw32-make
# 如果觉得太慢啊可以使用 -j 参数,使用多线程编译,加快速度,但是有可能会卡住;不过也不是问题,退出重新编译就行;
mingw32-make -j8
5、安装
输入以下命令进行安装,会将头文件复制到指定目录
# 正常情况下啊windows的编译是这个命令,但是我的修改过,改为了 mingw32-make-posix
mingw32-make install
安装完成后在 D:\cpp\opencv-3.4.16\sources\build\install\include\opencv2
目录就可以看到 opencv_contrib 中的头文件了,其中 face目录就是 opencv_contrib 中独有的头文件