C++实现人脸识别
177******01 发布于2019-05-22 浏览:3080 回复:5
0
收藏
快速回复

代码头文件:

#include "opencv2/objdetect.hpp"

#include "opencv2/highgui.hpp"

#include "opencv2/imgproc.hpp"

#include

using namespace std;

using namespace cv;

 

objdetect.hpp:OpenCV中的对象检测模块。highgui.hpp提供了简单的界面操作:创建和操作可以显示图像的窗口,将轨迹栏添加到窗口,从磁盘或内存读取和写入映像,从相机或文件中读取视频并将视频写入文件。imgproc.hpp提供了许多处理图像的功能,如图像过滤和几何变换。

void detectAndDraw( Mat& img, CascadeClassifier& cascade, double scale)

vector faces;

Mat gray;

cvtColor( img, gray, COLOR_BGR2GRAY );

然后在我们的灰度图像上应用detectMultiScale函数。

cascade.detectMultiScale( gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );

这个函数类似于我们在Python中使用的函数。人脸检测现在已经完成,我们需要在检测到的人脸周围绘制矩形。

for ( size_t i = 0; i < faces.size(); i++ )

{

Rect r = faces[i];

Scalar color = Scalar(255, 0, 0);

rectangle( img, cvPoint(cvRound(r.x*scale), cvRound(r.y*scale)), cvPoint(cvRound((r.x +

r.width-1)*scale), cvRound((r.y + r.height-1)*scale)), color, 3, 8, 0);

}

结果显示:

imshow( "Face Detection", img );

现在我们便可以简单地调用我们构建的人脸检测函数来实现人脸检测。

int main()

{

// Load the cascade classifier

cascade.load( "../../haarcascade_frontalcatface.xml" ) ;

double scale=1;

frame = imread('lenna.jpg', CV_LOAD_IMAGE_COLOR);

detectAndDraw( frame, cascade, scale );

return 0;

}

imread()用于加载输入图像。

收藏
点赞
0
个赞
共5条回复 最后由rose20135188回复于2019-06-10
#6rose20135188回复于2019-06-10

进来学习一下,谢谢楼主分享。

0
#5177******01回复于2019-06-03

每天都进步一点点

0
#4177******01回复于2019-05-22

互相学习呀

0
#3177******01回复于2019-05-22

欢迎分享

0
#2177******01回复于2019-05-22

认真学习

0
TOP
切换版块