我正在尝试使用OpenCV进行一些人脸识别(不是检测)。我发现这篇文章有一些代码:
http://www.cognotics.com/opencv/servo_2007_series/index.html
但是,此代码是使用较旧的C风格的OpenCV API编写的。是否有人使用像OpenCV 2.3.1这样的更新版本的C ++ API版本?
答案 0 :(得分:10)
更新:OpenCV 2.4.2现在附带了全新的cv::FaceRecognizer。请参阅以下详细文档:
我发布了libfacerec,一个用于OpenCV C ++ API(BSD许可证)的现代人脸识别库。 libfacerec没有其他依赖关系,并实现了Eigenfaces方法,Fisherfaces方法和局部二进制模式直方图。该部分库将包含在OpenCV 2.4中。
libfacerec的最新版本可在以下网址获得:
该库是为OpenCV 2.3.1编写的,考虑到即将推出的OpenCV 2.4,因此我不支持早于2.3.1的OpenCV版本。这个项目是一个带有详细记录的API的CMake项目,还有一个关于性别分类的教程。您可以在以下位置查看文档的HTML版本:
如果您想了解这些算法的工作原理,您可能需要阅读我的人脸识别指南(包括Python和GNU Octave / MATLAB示例):
相关出版物是:
答案 1 :(得分:3)
我正在使用c ++ api为我的工程师学位做面部识别项目。我认为c ++中关于面部识别的所有内容都相当简单,甚至比C(更少的指针)更简单。要使用PCA,您有一个名为PCA的类here。只需使用正确的方法并阅读文档即可理解。要使用输入数据构建矩阵,我创建了一个适当大小的矩阵,然后将图片粘贴为行(使用方法重塑)(cv :: Mat中有一个方法可以让你轻松获得一行矩阵) )。您只需要确保基础数据和测试数据具有相同的参数(通道,大小等)
修改强>
using namespace cv; //somewhere near top
将数据插入数据矩阵:
62 Mat reshaped=img.reshape(1,1);
63 Mat dataRow=_data.row(y++);
64 resize(reshaped,dataRow,dataRow.size(),0,0,CV_INTER_LINEAR);
计算pca:
251 _pca(_data,Mat(),CV_PCA_DATA_AS_ROW); //compute pca
252 _pca.project(_data,_vectors); // project original data to new coordinates
由于opencv的文档不是最好的,所以花一些时间阅读它并没有什么坏处。大多数c api函数在c ++ api中都有它们的等价物,你只需要做一些“写入搜索窗口并点击输入”搜索。而且,还有c ++教程可以掌握c ++ api。