Opencv高级1

Opencv中的人脸识别是基于Haar特征和+Adaboost级联分类器实现人脸识别的!

要理解这一节,首先要明白什么是特性?

特征其实就是某个区域像素运算的结果!比如haar feature其实就是用下面列出的模板在图像中滑动,计算白色区域覆盖的像素之和减去黑色区域覆盖的像素之和,计算出来的结果就是haar特征值!

Haar特征一般结合Adaboost分类器进行目标识别!

这里需要运动机器学习的知识!好在Opencv已经为我们训练了数据,提取了人脸的特征。opencv的源代码中有相应的xml特征文件,我们调用opencv提供的好的API就可以快速完成人脸识别的功能!

核心api是:

实施步骤:

HSV(Hue,Saturation,Value)是A. R. Smith在1978中创建的颜色空间,也叫Hexcone模型。

这个模型中颜色的参数是色调(H)、饱和度(S)和明度(V)。

用角度测量,取值范围为0 ~ 360,从红色开始逆时针计算,红色为0,绿色为120,蓝色为240。它们的补色分别是:黄色60,青色180,品红色300;

饱和度s表示颜色与光谱颜色的接近程度。一种颜色可以看作是某种光谱颜色与白色混合的结果。光谱色比例越大,颜色接近光谱色的程度越高,颜色的饱和度也越高。饱和度高,颜色深而亮。光谱颜色的白光成分为0,饱和度达到最高。一般取值范围为0% ~ 100%,值越大颜色越饱和。

亮度表示颜色的亮度,对于光源颜色,亮度值与发射体的亮度有关;对于对象的颜色,该值与对象的透射率或反射率有关。通常值的范围是0%(黑色)到100%(白色)。

结论:

注意:在opencv中,H、S和V的值分别是,而不是[0,1]和[0,1];

这里我们列出一些hsv空间的颜色值,在表中把一些紫色归类为红色。

[图像上传失败...(图片-4f70f7-1563843266225)]

。jpg)

注意,这只能是一个粗略的判断。按照我们正常的思维,在傍晚这个临界点是无法判断是夜晚还是白天的!

在一幅图片中,如果一个物体的颜色是纯色的,那么我们可以很容易地在一定范围内通过颜色过滤提取出这个物体。

下面我们有一张网球的图片,网球的颜色在一定范围内是绿色的。我们在这张图片中找不到其他有绿色的图片,可以考虑用绿色来提取!

默认情况下,图片的色彩空间是BGR色彩空间。如果我们想找到并提取纯绿色,我们可能需要写类似于(0,255,0)的东西。假设我们要代表一定范围的绿色,会很麻烦!

所以我们考虑转换到HSV颜色空间。我们很容易知道绿色色相H的范围,剩下的就是框定颜色的饱和度H和亮度V了!

实施步骤:

图像二值化是将图像上像素的灰度值设置为0或255的过程,也就是说整个图像呈现明显的黑白效果。

在数字图像处理中,二值图像占有非常重要的位置,图像的二值化大大减少了图像中的数据量,从而突出了目标的轮廓。

[图像上传失败...(图片-a 31052-1563843266226)]

我们使用一个全局值作为阈值。但是这并不是在所有情况下都是好的,例如,如果图像在不同的区域具有不同的照明条件。在这种情况下,自适应阈值会有所帮助。这里,算法根据像素周围的小区域来确定像素的阈值。因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同光照的图像提供了更好的结果。

除了上述参数,方法cv.adaptiveThreshold还有三个输入参数:

adaptiveMethod确定如何计算阈值:

块大小决定了附近区域的大小。从附近像素的平均值或加权和中减去一个常数。

日本Otsu提出的算法,又称最大类间方差法,被认为是图像分割中阈值选取的最佳算法。采用这种算法的好处是执行效率高!

& ltimg src= "。/img 2/Otsu . jpg " width = " 500 "/& gt;

如果我们把图像看成一个信号,那么噪声就是一个干扰信号。在采集图像时,由于各种干扰,我们可能会引入图像噪声。在计算机中,图像是一个矩阵。要给原始图像添加噪声,我们只需要给像素增加一定的灰度即可。

f(x,y) = I(x,y) +噪声

常见的噪音是椒盐噪音,为什么叫椒盐噪音?因为图像的像素会因为噪声的影响而随机变成暗点或者白点。这里的“椒”不是我们常见的红辣椒或青椒,而是外来的“椒”(一种香料)。我们知道辣椒是黑的,盐是白的,所以才有了这样一个形象的名字。

接下来,我们将生成10%胡椒噪声和盐噪声:

我们还要注意,opencv的图像矩阵类型是uint8,0以下和255以上的值不截断,而是使用模运算。也就是200+60=260% 256 = 4。所以我们需要把原始图像矩阵和噪声图像矩阵转换成浮点数进行加法,然后再转回。