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:\source\opencv-3.4.9\data\haarcascades里有很多训练好的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\n", 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); // 生成灰度图,提高检测效率 …………其他代码………… }
分类:
OpenCV
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!