OpenCv 之(图片人脸识别)和 (摄像头读入)

article/2025/10/25 21:51:15

##先来张人脸识别效果图:

这里写图片描述

##1、概述

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别、面部识别。

##2、人脸识别步骤

1    人脸图像采集及检测
2    人脸图像预处理
3    人脸图像特征提取以及匹配与识别

##3、 人脸识别的方法

在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容(opencv\sources\data\haarcascades ):

这里写图片描述

文件夹的名字“haarcascades”、“hogcascades”和“lbpcascades”分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器:"haar"特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别,“eye”特征主要用于眼睛的检测识别。实现人脸检测主要依赖于detectMultiScale()函数,下面简单说一下函数参数的含义,先看函数原型:
CV_WRAP virtual void detectMultiScale( const Mat& image,  CV_OUT vector<Rect>& objects,  double scaleFactor=1.1,  int minNeighbors=3, int flags=0,  Size minSize=Size(),  Size maxSize=Size() );  
各参数含义:
const Mat& image: 需要被检测的图像(灰度图)
vector<Rect>& objects: 保存被检测出的人脸位置坐标序列
double scaleFactor: 每次图片缩放的比例
int minNeighbors: 每一个人脸至少要检测到多少次才算是真的人脸
int flags: 决定是缩放分类器来检测,还是缩放图像
Size(): 表示人脸的最大最小尺寸

##4、源代码分析

####(1)检测图片中的人脸

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>using namespace std;
using namespace cv;int main()
{Mat image, image_gray;      //定义两个Mat变量,用于存储每一帧的图像image = imread("F://1.png");imshow("原图", image);cvtColor(image, image_gray, CV_BGR2GRAY);//转为灰度图equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理CascadeClassifier eye_Classifier;  //载入分类器CascadeClassifier face_cascade;    //载入分类器//加载分类训练器,OpenCv官方文档提供的xml文档,可以直接调用//xml文档路径  opencv\sources\data\haarcascades if (!eye_Classifier.load("F:\\haarcascade_eye.xml"))  //需要将xml文档放在自己指定的路径下{  cout << "Load haarcascade_eye.xml failed!" << endl;return 0;}if (!face_cascade.load("F:\\haarcascade_frontalface_alt.xml")){cout << "Load haarcascade_frontalface_alt failed!" << endl;return 0;}//vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化vector<Rect> eyeRect;vector<Rect> faceRect;//检测关于眼睛部位位置eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++){	rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255));   //用矩形画出检测到的位置}//检测关于脸部位置face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));for (size_t i = 0; i < faceRect.size(); i++){	rectangle(image, faceRect[i], Scalar(0, 0, 255));      //用矩形画出检测到的位置}imshow("人脸识别图", image);         //显示当前帧waitKey(0);}return 0;
}

####(2)检测摄像头中的人脸

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>using namespace std;
using namespace cv;int main()
{Mat image, image_gray;      //定义两个Mat变量,用于存储每一帧的图像VideoCapture capture(0);    //从摄像头读入视频while (1)                  //循环显示每一帧{capture >> image;     //读取当前帧//image = imread("F://1.png");//imshow("原图", image);cvtColor(image, image_gray, CV_BGR2GRAY);//转为灰度图equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理CascadeClassifier eye_Classifier;  //载入分类器CascadeClassifier face_cascade;    //载入分类器//加载分类训练器,OpenCv官方文档提供的xml文档,可以直接调用//xml文档路径  opencv\sources\data\haarcascades if (!eye_Classifier.load("F:\\haarcascade_eye.xml"))  //需要将xml文档放在自己指定的路径下{  cout << "Load haarcascade_eye.xml failed!" << endl;return 0;}if (!face_cascade.load("F:\\haarcascade_frontalface_alt.xml")){cout << "Load haarcascade_frontalface_alt failed!" << endl;return 0;}//vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化vector<Rect> eyeRect;vector<Rect> faceRect;//检测关于眼睛部位位置eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));//检测for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++){	rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255));   //用矩形画出检测到的位置}//检测关于脸部位置face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));//检测for (size_t i = 0; i < faceRect.size(); i++){	rectangle(image, faceRect[i], Scalar(0, 0, 255));      //用矩形画出检测到的位置}imshow("人脸识别图", image);         //显示当前帧char c = waitKey(30);         //延时30ms,即每秒播放33帧图像if (c == 27)  break;	}return 0;
}

效果图:
这里写图片描述

人脸识别源代码下载链接

GitHub源代码下载链接


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

相关文章

(项目笔记)opencv人脸识别

Haar级联&#xff1a; Haar特征&#xff1a;边缘特征&#xff0c;线性特征&#xff0c;中心环绕特征&#xff0c;对角线特征 这些特征组合为特征模板&#xff0c;特征模板里有白色和黑色矩形&#xff0c;模板特征即为白色矩形像素和减去黑色矩形像素和。 Haar 特征的提取简…

【opencv】基于opencv实现人脸识别,原理代码部分

上一部分我们解决了环境问题&#xff0c;这一部分我们可以开始上代码&#xff0c;环境没有配好的可以参照上一篇博客&#xff1a;环境搭建解决&#xff1a; 下面先说一下原理&#xff1a; 一.原理部分 本文基于opencv来实现人脸识别&#xff0c;大致实现流程可以描述为&#…

基于opencv的人脸识别和检测

人脸识别作为一个热门项目&#xff0c;目前有多种方法实现&#xff0c;利用python和opencv来实现&#xff0c;是一个比较简单的项目。 1.环境配置 windows平台 python版本&#xff1a;3.8.6 pycharm版本&#xff1a;2019.1.2 Opencv版本&#xff1a;4.5.3 安装了python后…

C++ OpenCV【人脸识别人眼识别】

此文章仅对人脸位置进行检测&#xff0c;使用haar级联的方法[OpenCV自带] #include <iostream> #include <opencv2/opencv.hpp> #include <vector> #include <cstdio> using namespace std; using namespace cv;//定义7种颜色&#xff0c;用于标记人脸…

通过opencv实现简单的人脸识别

文章目录 通过opencv实现简单的人脸识别1.环境配置2.收集数据集3.人脸数据的处理4.通过神经网络训练模型5.进行人脸识别6.总结 通过opencv实现简单的人脸识别 ​ 网上有很多通过opencv实现的简单人脸识别&#xff0c;本文于其他文章差别不大&#xff0c;仅为作者复现代码后的一…

基于OpenCv的人脸识别(Python完整代码)

实验环境&#xff1a;python 3.6 opencv-python 3.4.14.51 建议使用 anaconda配置相同环境 背景 人脸识别步骤 图1&#xff1a;人脸识别流程图 人脸采集 采集人脸图片的方法多种多样&#xff0c;可以直接从网上下载数据集&#xff0c;可以从视频中提取图片&#xff0c;还可以…

使用opencv实现简单的人脸识别

一、opencv模块的使用 1、简介 opencv-python是一个python绑定库&#xff0c;旨在解决计算机视觉问题。使用opencv模块&#xff0c;可以实现一些对图片和视频的操作。 2、安装 安装opencv之前需要先安装numpy, matplotlib。然后使用pip安装opencv库即可。 3、导入 使用im…

opencv实现人脸识别(c++实现)

1 说明 本文章基于opencv VS2015 实现人脸检测 2 效果 可以直接打开摄像头对人脸进行识别&#xff0c;这些标识框也会跟随你的人脸移动。隐私问题&#xff0c;我这里对图片进行了识别。 3 相关类及函数介绍 opencv中文文档 3.1 cv::VideoCapture 官方文档说明 功能 &am…

11 OpenCV图像识别之人脸识别

文章目录 1 Eigenfaces1.1 建模流程1.2 示例代码 2 Fisherfaces2.1 建模流程2.2 示例代码 3 Local Binary Histogram3.1 建模流程3.2 示例代码 OpenCV 提供了三种人脸识别方法&#xff1a; Eigenfaces Eigenfaces是一种基于PCA&#xff08;Principal Component Analysis&#…

OpenCV人脸识别

OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类:基于知识(根据眼睛,眉毛,嘴巴,鼻子等器官特征及相互几何位置关系来检测)和基于统计(将人脸看作一个二维像素矩阵,通过大量人脸图像样本构造人脸模式空间,由相似度量判断人脸是否存在). 基于知识的…

【OpenCV】 人脸识别

目录 一&#xff1a;前言 二&#xff1a;人脸识别案例 实现步骤及完整代码 步骤1 灰度化处理 步骤2 将灰度图再次进行 行列压缩 步骤3 直方图均值化 步骤4 使用模型 对每一个像素点遍历 图像甄别 人脸识别案例 源码分享 结果测试&#xff1a;可对人脸框选识别 三&…

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…