通过本文主要向大家介绍了opencv人脸识别,opencv人脸识别代码,opencv人脸识别原理,opencv人脸识别教程,opencv人脸识别程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
机器学习
机器学习的目的是把数据转换成信息。
机器学习通过从数据里提取规则或模式来把数据转成信息。
人脸识别
人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸。
每个节点的正确识别率很高,但正确拒绝率很低。
任一节点判断没有人脸特征则结束运算,宣布不是人脸。
全部节点通过,则宣布是人脸。
工业上,常用人脸识别技术来识别物体。
对图片进行识别
CascadeClassifier::empty
检查分类器是否已经载入。
C++: bool CascadeClassifier::empty() const
CascadeClassifier::load
从一个文件读取分类器。
C++: bool CascadeClassifier::load(const string& filename)
参数 filename – 所要读取分类器文件的文件名。文件可以是旧版的HAAR分类器模型也可以是新版的分类器模型。
CascadeClassifier::read
读取一个文件存储节点的分类器。
C++: bool CascadeClassifier::read(const FileNode& node)
CascadeClassifier::detectMultiScale
对不同大小的输入图像进行物体识别,并返回一个识别到的物体的矩阵列表。
C++: void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())
CascadeClassifier::setImage
设置被用于检测的图像。
C++: bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval, const Mat& image)
这个函数将在每张图片中被 CascadeClassifier::detectMultiScale() 自动调用。 但如果你想在不同位置手动使用 CascadeClassifier::runAt(),你需要先调用该函数,使得图像被积分计算。
CascadeClassifier::runAt
在指定点运行检测。
C++: int CascadeClassifier::runAt(Ptr<FeatureEvaluator>& feval, Point pt, double& weight)
如果级联分类器检测到给定的位置中的一个对象,该函数返回1。否则,它会返回已被否决的候选区域在哪个阶段的否定的指数。
使用CascadeClassifier::setImage() 设置图像的检测工作。
代码注释:
该函数将输入图片从一个色彩空间转到另一个色彩空间。当从RGB颜色空间进行变换时,应明确指定的信道的顺序(RGB或BGR)。值得注意,在OpenCV的默认颜色格式中,通常被称为作为RGB,但实际上是BGR(字节是相反的)。因此,在一个标准的(24位)的彩色图像的第一个字节是一个8位的蓝色分量,第二个字节将是绿色的,第三个字节将是红色的。而第四,第五,和第六字节,则是第二像素(蓝,然后绿色,然后红色),依此类推。
R、G和B 通道通常信道值范围:
CV_8U:0 — 255
CV_16U:0 — 65535
CV_32F:0 — 1
线性变换的情况下,有没有范围是无所谓的。但是,在一个非线性变换的情况下,输入的RGB图像应被归为适当的值范围内,以得到正确的结果。例如,如果你有一个32位浮点图像直接转换成一个8位的图像而没有任何缩放,那么它将有0到255的数值范围,而这并不能准确0..1所有浮点数的值。所以,你需要之前调用cvtColor,进行图像缩放。
代码注释:
cvtColor( frame, fram
机器学习的目的是把数据转换成信息。
机器学习通过从数据里提取规则或模式来把数据转成信息。
人脸识别
人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸。
每个节点的正确识别率很高,但正确拒绝率很低。
任一节点判断没有人脸特征则结束运算,宣布不是人脸。
全部节点通过,则宣布是人脸。
工业上,常用人脸识别技术来识别物体。
对图片进行识别
参数 | filename – 所要读取分类器文件的文件名 |
---|
CascadeClassifier::empty
检查分类器是否已经载入。
C++: bool CascadeClassifier::empty() const
CascadeClassifier::load
从一个文件读取分类器。
C++: bool CascadeClassifier::load(const string& filename)
参数 filename – 所要读取分类器文件的文件名。文件可以是旧版的HAAR分类器模型也可以是新版的分类器模型。
参数 | filename – 所要读取分类器文件的文件名。文件可以是旧版的HAAR分类器模型也可以是新版的分类器模型。 |
---|
CascadeClassifier::read
读取一个文件存储节点的分类器。
C++: bool CascadeClassifier::read(const FileNode& node)
CascadeClassifier::detectMultiScale
对不同大小的输入图像进行物体识别,并返回一个识别到的物体的矩阵列表。
C++: void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())
参数 |
|
---|
CascadeClassifier::setImage
设置被用于检测的图像。
C++: bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval, const Mat& image)
参数 |
|
---|
这个函数将在每张图片中被 CascadeClassifier::detectMultiScale() 自动调用。 但如果你想在不同位置手动使用 CascadeClassifier::runAt(),你需要先调用该函数,使得图像被积分计算。
CascadeClassifier::runAt
在指定点运行检测。
C++: int CascadeClassifier::runAt(Ptr<FeatureEvaluator>& feval, Point pt, double& weight)
参数 |
feval – 用于特征计算的特征求值程序。 pt – 指定检测窗口左上角的点。窗口的大小和检测的图片大小一致。 |
---|
如果级联分类器检测到给定的位置中的一个对象,该函数返回1。否则,它会返回已被否决的候选区域在哪个阶段的否定的指数。
使用CascadeClassifier::setImage() 设置图像的检测工作。
代码注释:
参数 |
|
---|
该函数将输入图片从一个色彩空间转到另一个色彩空间。当从RGB颜色空间进行变换时,应明确指定的信道的顺序(RGB或BGR)。值得注意,在OpenCV的默认颜色格式中,通常被称为作为RGB,但实际上是BGR(字节是相反的)。因此,在一个标准的(24位)的彩色图像的第一个字节是一个8位的蓝色分量,第二个字节将是绿色的,第三个字节将是红色的。而第四,第五,和第六字节,则是第二像素(蓝,然后绿色,然后红色),依此类推。
R、G和B 通道通常信道值范围:
CV_8U:0 — 255
CV_16U:0 — 65535
CV_32F:0 — 1
线性变换的情况下,有没有范围是无所谓的。但是,在一个非线性变换的情况下,输入的RGB图像应被归为适当的值范围内,以得到正确的结果。例如,如果你有一个32位浮点图像直接转换成一个8位的图像而没有任何缩放,那么它将有0到255的数值范围,而这并不能准确0..1所有浮点数的值。所以,你需要之前调用cvtColor,进行图像缩放。
代码注释:
cvtColor( frame, fram