2011-10-31 58 views
2

我想使用OpenCV做一些人脸识别(未检测)的东西。我发现这篇文章有一些代码:如何使用OpenCV进行人脸识别?

http://www.cognotics.com/opencv/servo_2007_series/index.html

然而,这个代码是使用旧的C风格的OpenCV的API编写的。是否有人使用OpenCV 2.3.1等更新版本的C++ API版本?

+0

[OpenCV中的人脸识别]的可能的副本(http://stackoverflow.com/questions/4856929/face-recognition-in-opencv) – Kiran

回答

2

我正在使用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中的doc使用并不是最好的选择,花一些时间阅读并不会伤害到它。大多数c api函数在C++ api中都有它们的等价物,你只需要做一些“写入搜索窗口并按回车”搜索。而且,在C++中也有教程来掌握C++ api。

+0

您能分享一些代码吗? –

9

更新:OpenCV 2.4.2现在带有非常新的cv::FaceRecognizer。请参阅非常详细的文档:

我已经发布libfacerec,一个现代化的人脸识别库OpenCV的C++ API(BSD许可证)。 libfacerec没有额外的依赖关系,并实现了特征脸方法,Fisherfaces方法和局部二值模式直方图。部分图书馆将被包含在OpenCV 2.4中。

的libfacerec的最新版本,请访问:

图书馆与即将到来的OpenCV的2.4记住了OpenCV的2.3.1写的,所以我不支持OpenCV版本早于2.3.1。这个项目是一个CMake项目,具有良好的文档API,还有一个关于性别分类的教程。

如果你想了解这些算法是如何工作的,你可能想要看我的指南人脸识别(包括Python和GNU八度:您可以看到文档的HTML版本/ MATLAB示例):

的相对前列出版物是:

  • Turk,M.,和Pentland,A。用于识别的特征脸。。 Journal of Cognitive Neuroscience 3(1991),71-86。
  • Belhumeur,P. N.,Hespanha,J.,and Kriegman,D. Eigenfaces vs. Fisherfaces:Recognition using class specific linear projection。。 IEEE Transactions on Pattern Analysis and Machine Intelligence 19,7(1997),711-720。
  • Ahonen,T.,Hadid,A.和Pietikainen,M。带局部二元模式的人脸识别。。 Computer Vision - ECCV 2004(2004),469-481。