QT+opencv实现人脸检测并提取裁剪

来源:互联网 发布:python 查数据类型 编辑:程序博客网 时间:2024/05/22 06:49

开发环境:
ubuntu
Opencv3.0.0
QT4
最近在学习人脸识别,基于特征脸的人脸识别。需要处理一些图片加入训练集,所以写了这个小的demo进行图片处理。

1首先在QT中新建一个工程

这里写图片描述
选择QT console application 控制台程序

2在.pro文件中添加opencv

CONFIG += link_pkgconfigPKGCONFIG += opencv

3在main.cpp文件中添加如下代码

#include "opencv2/core/core.hpp"#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include<cv.h>#include <iostream>#include <stdio.h>using namespace std;using namespace cv;std::vector<Rect> faces;string face_cascade_name = "haarcascade_frontalface_alt2.xml";//该文件存在于OpenCV安装目录下的\sources\data\haarcascades内,需要将该xml文件复制到当前工程目录下CascadeClassifier face_cascade;void detectAndDisplay(Mat frame,int flage);int main(int argc, char** argv){    if (!face_cascade.load(face_cascade_name)){        printf("级联分类器错误,可能未找到文件,拷贝该文件到工程目录下!\n");        return -1;    }    for(int i=0;i<50;i++)    {     string  str = format("face/korean_male/%d.jpg",i);//读取文件     Mat image;     image = imread(str, 1);  //当前工程的image目录下的lyf.jpg文件,注意目录符号    if (image.empty())    {        printf("no find image!");    }    imshow("人脸识别", image);    waitKey(1000);    detectAndDisplay(image,i); //调用人脸检测函数     waitKey(1000);    }}void detectAndDisplay(Mat face,int flage){    Mat face_gray;    cvtColor(face, face_gray, CV_BGR2GRAY);  //rgb类型转换为灰度类型    equalizeHist(face_gray, face_gray);   //直方图均衡化    face_cascade.detectMultiScale(face_gray, faces, 1.1, 4, 0, Size(30, 30));//找出人脸    for (size_t j = 0; j < faces.size(); j++)    {        Mat faceROI = face(faces[j]);        Mat MyFace;        if (faceROI.cols > 100)        {            resize(faceROI, MyFace, Size(92, 112));//调整图像大小为92*112           string  str = format("face/korean_male2/%d.jpg",flage);            imwrite(str, MyFace);            imshow("处理结果", MyFace);        }    }   }

注意:
需要将
haarcascade_frontalface_alt2.xml复制到工程目录
//该文件存在于OpenCV安装目录下的\sources\data\haarcascades内,需要将该xml文件复制到当前工程目录下。

0 0