【OpenCV】 人脸识别

article/2025/10/26 12:41:58

目录

一:前言

二:人脸识别案例 实现步骤及完整代码

步骤1 灰度化处理

步骤2 将灰度图再次进行 行列压缩 

步骤3 直方图均值化

步骤4 使用模型 对每一个像素点遍历 图像甄别

人脸识别案例 源码分享

结果测试:可对人脸框选识别

三:车辆识别案例 级联分类器 具体实现


一:前言

本次人脸识别技术使用到的是级联分类器

对于级联分类器,如果想要自己训练模型可以参考这篇文章

【OpenCV】 级联分类器训练模型

【友情提示:训练对电脑的配置要求比较高,另外还需要有足够庞大的样本数据,因此,如果是研究生在导师实验室用着3090的,可以自己训练,但也要投入足够的时间进行数据采集。不过,这边为了方便大家学习,博主会在资源中分享  人脸识别训练模型  车辆识别训练模型  ,在读完这篇文章后,感兴趣的,想要学习的,欢迎自取】

二:人脸识别案例 实现步骤及完整代码

步骤1 灰度化处理

    //灰度化处理 节省内存Mat gray;cvtColor(frame,gray,CV_RGB2GRAY);

步骤2 将灰度图再次进行 行列压缩 

    //级联分类器比帧差法还更慢,因此,需要再将灰度图大小压缩一半左右 行列压缩Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);//按存储大小计算  压缩方式采用线性压缩resize(gray,smalling,smalling.size(),0,0,INTER_LINEAR);

步骤3 直方图均值化

    //直方图均值化 让灰度图经过直方图函数处理 黑白分明equalizeHist(smalling,smalling);//imshow("smalling",smalling);

步骤4 使用模型 对每一个像素点遍历 图像甄别

    //调用级联分类器进行模型匹配并进行框选识别 使用模型去进行每一个像素点的遍历vector<Rect>faces;//使用CV_HAAR_SCALE_IMAGE算法 图像甄别cascade.detectMultiScale(smalling,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,Size(30,30));//绘制矩形vector<Rect>::const_iterator iter;//使用到容器迭代器进行遍历for(iter=faces.begin();iter!=faces.end();iter++){rectangle(frame,cvPoint(cvRound(iter->x*scale),cvRound(iter->y*scale)),//左上cvPoint(cvRound((iter->x+iter->width)*scale),cvRound((iter->y+iter->height)*scale)),//右下Scalar(0,255,0),2,8//颜色 像素位);}imshow("frame",frame);

人脸识别案例 源码分享

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;//人脸识别
void datectFace(Mat &frame,CascadeClassifier cascade,double scale)
{//灰度化处理 节省内存Mat gray;cvtColor(frame,gray,CV_RGB2GRAY);//级联分类器比帧差法还更慢,因此,需要再将灰度图大小压缩一半左右 行列压缩Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);//按存储大小计算  压缩方式采用线性压缩resize(gray,smalling,smalling.size(),0,0,INTER_LINEAR);//直方图均值化 让灰度图经过直方图函数处理 黑白分明equalizeHist(smalling,smalling);//imshow("smalling",smalling);//调用级联分类器进行模型匹配并进行框选识别 使用模型去进行每一个像素点的遍历vector<Rect>faces;//使用CV_HAAR_SCALE_IMAGE算法 图像甄别cascade.detectMultiScale(smalling,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,Size(30,30));//绘制矩形vector<Rect>::const_iterator iter;//使用到容器迭代器进行遍历for(iter=faces.begin();iter!=faces.end();iter++){rectangle(frame,cvPoint(cvRound(iter->x*scale),cvRound(iter->y*scale)),//左上cvPoint(cvRound((iter->x+iter->width)*scale),cvRound((iter->y+iter->height)*scale)),//右下Scalar(0,255,0),2,8//颜色 像素位);}imshow("frame",frame);
}int main(int argc, char *argv[])
{//级联分类器对象CascadeClassifier cascade;//读取级联分类器cascade.load("D:/00000cars-face/face.xml");Mat frame;//视频路径的获取VideoCapture cap(0);while (cap.read(frame)){//将读到的帧进行显示imshow("frame",frame);//检测识别 图像 级联分类器 比例datectFace(frame,cascade,2);waitKey(3);}return 0;
}

结果测试:可对人脸框选识别

三:车辆识别案例 级联分类器 具体实现

如果对于上述的人脸识别案例 理解透彻 那么车辆识别也是一样的实现方法 只不过就是换了一个级联分类器 图像数据读取 罢了。

这边就直接给出 车辆识别案例 完整代码

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;//车辆识别案例
void datectCarDaw(Mat &frame,CascadeClassifier cascade,double scale)
{//灰度化处理 节省内存Mat gray;cvtColor(frame,gray,CV_RGB2GRAY);//级联分类器比帧差法还更慢,因此,需要再将灰度图大小压缩一半左右 行列压缩Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);//按存储大小计算  压缩方式采用线性压缩resize(gray,smalling,smalling.size(),0,0,INTER_LINEAR);//直方图均值化 让灰度图经过直方图函数处理 黑白分明equalizeHist(smalling,smalling);//imshow("smalling",smalling);//调用级联分类器进行模型匹配并进行框选识别 使用模型去进行每一个像素点的遍历vector<Rect>cars;//使用CV_HAAR_SCALE_IMAGE算法 图像甄别cascade.detectMultiScale(smalling,cars,1.1,2,0|CV_HAAR_SCALE_IMAGE,Size(30,30));//绘制矩形vector<Rect>::const_iterator iter;//使用到容器迭代器进行遍历for(iter=cars.begin();iter!=cars.end();iter++){rectangle(frame,cvPoint(cvRound(iter->x*scale),cvRound(iter->y*scale)),//左上cvPoint(cvRound((iter->x+iter->width)*scale),cvRound((iter->y+iter->height)*scale)),//右下Scalar(0,255,0),2,8//颜色 像素位);}imshow("frame",frame);
}int main(int argc, char *argv[])
{//级联分类器对象CascadeClassifier cascade;//读取级联分类器cascade.load("D:/00000cars-face/cars.xml");Mat frame;//视频路径的获取VideoCapture cap("D:/00000000000003jieduanshipincailliao/carMove.mp4");while (cap.read(frame)){//将读到的帧进行显示imshow("frame",frame);//检测识别 图像 级联分类器 比例datectCarDaw(frame,cascade,2);waitKey(3);}return 0;
}

结果测试:

可以看出,图中汽车可以被识别框选,电动车不会被识别框选。

相比博主在上周分享的 帧差法 车辆识别 来看,本次车辆识别的准确度明显提高,因此,这种方法非常值得学习!

想了解 帧差法 车辆识别 可以阅读下面这篇文章

车辆识别 帧差法 具体步骤 手把手教学

以上,就是博主的全部内容啦!欢迎一起交流学习!


http://chatgpt.dhexx.cn/article/dPkIGwYJ.shtml

相关文章

OpenCv人脸识别开发实战

一、OpenCV简介 OpenCV&#xff08;全称&#xff1a;Open Source Computer Vision Library&#xff09;&#xff0c;是一个跨平台的计算机视觉库。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。 ​ OpenCV用C语言编写&#xff0c;它的主要接口也是C语言&#…

opencv-人脸识别

人脸识别即程序对输入的图像进行判别是否有人脸&#xff0c;并识别出有人脸的图像所对应的人。即我们常说的人脸识别一般包含了人脸检测和人脸识别两部分。下面对其在opencv中的相应模块进行分别介绍。 在opencv官网中&#xff0c;有许多推荐人脸在线数据集&#xff1a;http:/…

基于opencv的人脸识别

目录 一、OpenCV的简介 1、应用场景 二、人脸识别 1、人脸识别简介 2、人脸识别系统基本组成 三、人脸识别流程 四、主要代码注释 1、人脸采集函数 2、人脸训练函数 3、人脸识别函数&#xff08;注取消语音播报识别会流畅多&#xff09; 五、功能实现 六、演示视频…

最简单体验opencv人脸识别

所需软件&#xff1a;PyCharm 所需硬件&#xff1a;一台电脑 如果没有安装PyCharm&#xff0c;csdn上面搜一下安装教程就行&#xff0c;很简单的。 打开PyCharm&#xff0c;如果没有装opencv&#xff0c;则点击最下面的terminal&#xff0c;在终端下输入pip install opencn-p…

基于opencv的人脸识别(适合初学者)

简单易懂的人脸识别&#xff0c;学不会直接跪倒&#xff01; 一、人脸识别步骤 二、直接上代码 &#xff08;1&#xff09;录入人脸.py import cv2face_name cjw # 该人脸的名字# 加载OpenCV人脸检测分类器 face_cascade cv2.CascadeClassifier("D:/BaiduNetdiskDow…

手把手教你opencv做人脸识别(附源码+文档)

文章目录 一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、 SSD结合摄像头人脸检测六、结语 一、环境 pip install opencv-pythonpython3.9 pycharm2020 人狠话不多&#xff0c;直接上代码&#xff0c;注释在代码里面&#xff0c;不说废…

SIFT算法实现图片匹配

SIFT (Scale-Invariant Feature Transform)是David Lowe 在1999发明的一种算法。它在世界范围内&#xff0c;作为图像对齐和对象识别的参考方法。此方法的鲁棒性能够检测场景的不同比例、角度和照明的因素。silx 中可用的实现使用 OpenCL&#xff0c;这意味着它可以在图形处理单…

SIFT

SIFT features Scale Invariant Feature Transform (SIFT) is an approach for detecting and extracting local feature descriptors that are reasonably invariant to change in illumination, image noise, rotation, scaling, and small changes in viewpoint. SIFT是一…

对SIFT算法的理解,尤其是尺度不变性

SIFT算法四大块 1&#xff0c;尺度空间的建立&#xff0c;最难理解的部分&#xff0c;这一步是为了找到极值点的潜在位置 2&#xff0c;极值点精确定位&#xff0c;通过曲线拟合找到极值点的确切位置 3&#xff0c;分配主方向&#xff0c;为特征点赋予一个方向标志&#xff…

第九章三续:SIFT算法的应用--目标识别之Bag-of-words模型

SIFT算法的应用 &#xff0d;目标识别之用Bag-of-words模型表示一幅图像 作者&#xff1a;wawayu&#xff0c;July。编程艺术室出品。 出处&#xff1a;http://blog.csdn.net/v_JULY_v 。 引言 本blog之前已经写了四篇关于SIFT的文章&#xff0c;请参考九、图像特征提取与匹配…

SIFT算法简介

1、 STFT&#xff08;Scale Invariant Feature Transform&#xff09;简介 1.1 SIFT特征检测的步骤1.2 SIFT算法的特点1.3 SIFT算法可以解决的问题 2 、尺度空间 2.1 多分辨率金字塔2.2 高斯金字塔构建示例2.3 高斯尺度空间&#xff08;使用不同的参数&#xff09; 3、DoG空间极…

经典算法研究系列:九、图像特征提取与匹配之SIFT算法

经典算法研究系列&#xff1a;九、SIFT算法研究 作者:July、二零一一年二月十五日。 推荐阅读&#xff1a;David G. Lowe, "Distinctive image features from scale-invariant keypoints," International Journal of Computer Vision, 60, 2 (2004), pp. 91-110---…

SIFT算法原理详解

通过《图像局部不变性特征与描述》学习SIFT&#xff0c;遇到各种Issue&#xff0c;总结了这篇博客和另外九篇博客。感谢关注&#xff0c;希望可以互相学习&#xff0c;不断提升。转载请注明链接&#xff1a;https://www.cnblogs.com/Alliswell-WP/p/SIFT.html 如果想深入研究SI…

SIFT算法详解与代码解析

Sift算法详解及代码解析 学了SIFT也有1个半月了&#xff0c;真的是坎坷不断&#xff0c;也因为我可能接触图像邻域时间不长&#xff0c;有很多相关知识要学习&#xff0c;直至今日&#xff0c;才把SIFT大致弄明白。但还有些细节值得去深究&#xff0c;我先把我个人对SIFT算法的…

图像处理——SIFT算法

[SIFT算法原文(Distinctive Image Features from Scale-Invariant Keypoints) SIFT算法&#xff08;Scale-invariant feature transform&#xff09;&#xff0c;即尺度不变特征变换&#xff0c;由David Lowe提出&#xff0c;是一种基于局部兴趣点的算法&#xff0c;因此不仅对…

特征点匹配——SIFT算法详解

之前在学习三维重建的过程中&#xff0c;了解过SIFT算法&#xff0c;现在老师要求详细的了解SIFT算法&#xff0c;看看能不能对它进行改进&#xff0c;于是又详细的看了一遍SIFT算法。记录一下。 一、SIFT算法综述 SIFT&#xff08;Scale Invariant Feature Transform&#x…

SIFT算法之python实现

0. 算法原理细节可参考&#xff1a; https://blog.csdn.net/abcjennifer/article/details/7639681https://blog.csdn.net/zddblog/article/details/7521424?depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_sourcedistribute.pc_re…

Python实现SIFT算法,附详细公式推导和代码

SIFT特征点提取算法 1、算法简介 尺度不变特征转换即SIFT (Scale-invariant feature transform)是一种计算机视觉的算法。它用来侦测与描述影像中的局部性特征&#xff0c;它在空间尺度中寻找极值点&#xff0c;并提取出其位置、尺度、旋转不变量&#xff0c;此算法由 David …

图像特征匹配方法——SIFT算法原理及实现

传统图像处理中图像特征匹配有三个基本步骤&#xff1a;特征提取、特征描述和特征匹配。特征提取就是从图像中提取出关键点&#xff08;或特征点、角点&#xff09;等。特征描述就是用一组数学向量对特征点进行描述&#xff0c;其主要保证不同的向量和不同的特征点之间是一种对…

SIFT算法原理介绍

本文转自&#xff1a;https://blog.csdn.net/qq_37374643/article/details/88606351 SIFT算法 SIFT即尺度不变特征变换&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局部特征描述子。 一、SIFT算…