zoukankan      html  css  js  c++  java
  • opencv detectMultiScale(),批量读取目录内图片

    此函数用已经训练好的分类器(xml文件)来检测人脸人眼等。

    【参数说明】

    1.image——待检测图片,一般为灰度图像加快检测速度;

    2.objects——被检测物体的矩形框向量组;

    3.scaleFactor——每次图像尺寸减小的比例,默认为1.1,即每次缩小10%

    4.minNeighbors——默认3,每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸)

    5.flags——要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因为这些区域通常不会是人脸所在区域;

    6.minSize——目标的最小尺寸

    7.maxSize——目标的最大尺寸

    【用法】

    opencv源码目录D:sourceopencv-3.4.9datahaarcascades里有很多训练好的xml,检测人脸的用以下之一。

    把xml文件放到自己的工程目录中,运行下述代码即可。(图片网上找一个就可以)

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
        // 【1】加载分类器
        CascadeClassifier cascade;
        cascade.load("haarcascade_frontalface_default.xml");
        // 【2】读取图片
        Mat srcImage, grayImage;
        srcImage = imread("D:/face.jpg");
        imshow("【原图】", srcImage);
        cvtColor(srcImage, grayImage, CV_BGR2GRAY); // 生成灰度图,提高检测效率
        // 定义3种颜色,用于标记人脸
        Scalar colors[] =
        {
            //蓝绿红
            Scalar(255, 0, 0),
            Scalar(0, 255, 0),
            Scalar(0, 0, 255),
        };
        // 【3】检测
        vector<Rect> rects;
        cascade.detectMultiScale(grayImage, rects, 1.1, 3, 0);  // 分类器对象调用
        printf("检测到人脸个数:%d
    ", rects.size());
        // 【4】标记--在脸部画圆
        for (int i = 0; i < rects.size(); i++)
        {
            Point  center;
            int radius;
            //画圆
            center.x = cvRound((rects[i].x + rects[i].width * 0.5));
            center.y = cvRound((rects[i].y + rects[i].height * 0.5));
            radius = cvRound((rects[i].width + rects[i].height) * 0.25);
            circle(srcImage, center, radius, colors[i % 3], 2);
            //画矩形
            rectangle(srcImage, Rect(rects[i].x, rects[i].y, rects[i].width, rects[i].height), colors[i % 3], 2);
        }
        // 【5】显示
        imshow("【人脸识别detectMultiScale】", srcImage);
    
        waitKey(0);
        return 0;
    }

    【批量读取图片】

        cv::String path = "D:/data/*.jpg";
        vector<cv::String> paths;
        glob(path, paths);//遍历结果存储到paths中,paths内容格式如,D:/data/3.jpg
        Mat srcImg, grayImg;
        for (int i = 0; i < paths.size(); i++)
        {
            srcImg = imread(paths[i]);
            cvtColor(srcImg, grayImg, CV_BGR2GRAY); // 生成灰度图,提高检测效率
            …………其他代码…………
        }
  • 相关阅读:
    Java Logging: Log Levels
    Java Logging: Logger Hierarchy
    Java Logging: Logger
    Java Logging: Basic Usage
    Use final liberally
    Writing Final Classes and Methods
    Java Logging: Overview
    base Tag
    DOM Nodes
    Browser environment
  • 原文地址:https://www.cnblogs.com/xixixing/p/12327453.html
Copyright © 2011-2022 走看看