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

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

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

QT+opencv实现人脸检测并提取裁剪_第1张图片
选择QT console application 控制台程序

2在.pro文件中添加opencv

CONFIG += link_pkgconfig
PKGCONFIG += 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
#include 
#include 
using namespace std;
using namespace cv;

std::vector 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文件复制到当前工程目录下。

你可能感兴趣的:(Ubuntu,QT集成开发环境与OpenCV)