一、实验目的:我这里完成的是,将8张人脸图片(4组,每组两张)存入库中,选取1张图片,程序识别出与其匹配的另一张。
这里介绍分三个步骤完成该工作,①程序读取摄像头、拍照
②程序从电脑文档中读取图片
③检测人脸,并用红框框出人脸
④使用感知哈希算法匹配最相似的图片
二、实验环境: Win 7(x64)、visual studio 2010、openCV-2.4.3
使用语言:C++
三、实验准备:①安装好vs2010,本文不予介绍。
②配置opencv :
1'进入官网下载http://opencv.org/ (OpenCv 2.4x是支持Vs2010的,建议根据自己的Vs版本安装相应的OpenCv的版本)解压后,目录如下:
2'打开vs2010,创建项目,这里以我的工程名test为例。右击项目->属性->vc++目录->包含目录, 添加三个路径:(在解压后opencv下的build目录)
E:\新建文件夹\opencv\build\include
E:\新建文件夹\opencv\build\include\opencv
E:\新建文件夹\opencv\build\include\opencv2
然后点击库目录,添加路径:E:\新建文件夹\opencv\build\x86\vc10\lib
配置好了后,第二步,点击链接器->输入->附加依赖项,编辑添加,把E:\新建文件夹\opencv\build\x86\vc10\bin里面左右的文件名称全导入进去,导入带d的文件,比如有opencv_calib3d243.dll与opencv_calib3d243d.dll文件,只需添加后者带d的即可。
至此,openCV配置已经全部完成。接下来编写代码。
四、编写代码
①为了收集图片库,我编写了直接拍照的功能,按下p进行拍照,并自动命名排序存到文件中。
#include #include#include
using namespacecv;int main( int argc, char**argv )
{int i=1;//照片名从1开始命名
while(1)
{
CvCapture*pCapture=cvCreateCameraCapture(-1);//打开摄像头
Mat image=cvQueryFrame(pCapture); //将摄像头拍的以图片形式展现
cvNamedWindow("frame",1); //命名一个窗口
imshow("frame",image); //在窗口显示图片
string filename=format("C:\\images\\