opencv haar人脸识别

本章内容


        haar 级联分类器,人脸识别
        计算流程:
            1. 创建并加载分类器
            2. 读入图像,并转化成灰度图像
            3. 直方图均衡化
            4. 目标检测
            5. 绘制检测结果

 

opencv haar人脸识别_第1张图片

 

输出结果:

opencv haar人脸识别_第2张图片

源码

#include
#include

 

int main(int argc, char** argv) {
    /*本章内容
        haar 级联分类器,人脸识别
        计算流程:
            1. 创建并加载分类器
            2. 读入图像,并转化成灰度图像
            3. 直方图均衡化
            4. 目标检测
            5. 绘制检测结果
    */
    cv::Mat src = cv::imread("/home/wang/dev/Image/heihei.jpeg");
    cv::Mat src1 = cv::imread("/home/wang/dev/Image/books.jpg", cv::IMREAD_REDUCED_COLOR_8);
    if (src.empty() || src1.empty()) {
        printf("could not load images...\n");
        return -1;
    }
    cv::imshow("box image", src);
    cv::imshow("scene image", src1);

    cv::String haarFile = "/home/wang/dev/opencv-3.4.5/data/haarcascades/haarcascade_frontalface_alt.xml";
    cv::CascadeClassifier face_cascade;
    if(!face_cascade.load(haarFile)){
        std::cout << " 权重导入失败" << std::endl;
        return -1;
    }
    cv::Mat gray;
    cv::cvtColor(src,gray,cv::COLOR_BGR2GRAY);
    cv::Mat grayHist;
    cv::equalizeHist(gray,grayHist);
    /*目标检测
     * api接口:CV_WRAP void detectMultiScale( InputArray image,
                          CV_OUT std::vector& objects,
                          double scaleFactor = 1.1,
                          int minNeighbors = 3, int flags = 0,
                          Size minSize = Size(),
                          Size maxSize = Size() );
        参数分析:
            @param scaleFactor Parameter specifying how much the image size is reduced at each image scale.
            @param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have
            to retain it.
            @param flags Parameter with the same meaning for an old cascade as in the function
            cvHaarDetectObjects. It is not used for a new cascade.
            @param minSize Minimum possible object size. Objects smaller than that are ignored.
            @param maxSize Maximum possible object size. Objects larger than that are ignored. If `maxSize == minSize` model is evaluated on single scale
    */
    std::vector rects;
    face_cascade.detectMultiScale(grayHist,rects,1.1,1, 0, cv::Size(40, 40)); // , 0, cv::Size(50, 50), cv::Size(200, 200)
    for(int i=0; i< rects.size();i++) cv::rectangle(src,rects[i],cv::Scalar(0,255,0),4);
    cv::imshow("haar 人脸检测", src);

    cv::waitKey(0);
    return 0;
}

 

 

 

你可能感兴趣的:(opencv计算机视觉)