当前位置:   article > 正文

计算机视觉——简介以及人脸数目检测_人脸个数识别

人脸个数识别
1.什么是计算机视觉

\qquad 计算机视觉(computer vision):机器试图理解所看到的目标。计算机视觉通过算法去尝试理解视觉信息,从而将理解转化为分类,决策,模式观察等等。

2.计算机视觉的应用

\qquad 物体检测、字符识别、指纹识别等等。

3.计算机视觉如何理解视觉信息?

\qquad 计算机理解视觉信息,有两种方式,一种是自下而上(bottom-up),一种是自上而下(up-bottom)。两者的区别是计算机的注意机制不同。

3.1由下而上(bottom-up)的方式

\qquad 所谓计算机由下而上的理解视觉信息,是指计算机只关注图像中的兴趣区域,获取对象特征;

3.1由上而下(up-bottom)的方式

\qquad 所谓计算机由上而下的理解视觉信息,是指计算机关注图像中的整体区域,即通过全局信息来得到当前的图像关注点,利用背景的视觉信息获取对对象的理解。

4.图像
4.1如何让计算机对图像进行处理?

\qquad 图像即数组。
\qquad 图像由一个个像素点组成,图像的单位面积像素点越多,图像的分辨率越高,而每个像素点我们可以由数字确定表示,计算机可以对这些表示像素点的数值进行处理,从而进行图像处理。
\qquad 每一张图像,我们都可以看成一个二维网格,每一个像素都是组成网格的最小单元。

4.2基于RGB的像素表示

\qquad 每一个像素点都有一个颜色,那么这个颜色如何使用数值表示呢?在RGB色彩原理中,任何一种颜色都可以由一个3 × \times × 1的向量[R,G,B]表示。
RGB配色表
\qquad 查看RGB配色表,我们可以看出各种颜色的RGB的值,即向量的值。比如黑色[0,0,0],白色[255,255,255],其它颜色也都分布在[0,0,0]和[255,255,255]之间,其中当R=G=B时,颜色为不同程度的灰色;当颜色为彩色时,[R,G,B]三者不完全相同。
\qquad 为了减轻计算机的计算量,当图片为二进制图像或者灰度图像时,因为R=G=B,所以我们只采用1 × \times × 1的数值表示像素颜色,即每个像素点只有一个通道;当图像为彩色时,我们采取3 × \times × 1的向量[R,G,B]表示每个像素点,即每个像素点有三个通道。
\qquad 假如一张灰度图像,长有200个像素点,宽有150个像素点,所以可以使用200 × \times × 150的矩阵表示;假如一张彩色图像,长有200个像素点,宽有150个像素点,那么可以用200 × \times × 150 × \times × 3的3D矩阵阵列来表示。
\qquad 基于RGB的色彩组成原理,我们对图像做很多操作,比如图像分割,利用同一张图像中,不同物体对象间的色彩差异,查找对象间的边缘,从而对同一张图片中的不同对象进行分割;寻找角点,在对图像进行分割之后,查找图像以获得某些特征,也称为角点。

5.图像处理基础函数

\qquad 我们使用python对图像进行处理,需要安装opencv-python,matplotlib等。
\qquad 5.1 读取图像
dog

import cv2
import matplotlib.pyplot as plt
import time

p_color = cv2.imread('F:\dog.jpg')
print(p_color.shape)
print(p_color)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

\qquad 通过cv.imread()可以读取图片,生成数值矩阵,上面这张dog图片的矩阵形状为520 × \times × 600 × \times × 3,是一张彩色图像。
\qquad 5.2 彩色图像灰度化,opencv是对灰度图像进行处理,所以需要把彩色图像处理为灰度图像。

import cv2
import matplotlib.pyplot as plt

p_color = cv2.imread('F:\dog.jpg')
p_gray = cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY)
print(p_gray.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

\qquad 通过cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY),将p_color转换为灰度图片,上述代码输出矩阵为520 × \times × 600。

\qquad 5.2 矩阵图像的可视化

import cv2
import matplotlib.pyplot as plt

p_color = cv2.imread('F:\dog.jpg')
p_gray = cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY)
plt.imshow(p_gray,cmap='gray')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

灰度图 \qquad plt.imshow(p_gray,cmap=‘gray’) plt.show()将灰度化的图像显示。

6.人脸数目检测
import cv2
import matplotlib.pyplot as plt

# 载入图片
p_color = cv2.imread('../face1.jpg')
# 将图像灰度化
p_gray = cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY)
#展示灰度图像
plt.imshow(p_gray,cmap='gray')
plt.show()

# 载入haarcascade级联分类器cascade classifier
haarcascade = cv2.CascadeClassifier('../haarcascade_frontalface_alt.xml')
# 检测图像人脸个数
faces = haarcascade.detectMultiScale(p_gray, scaleFactor=1.1, minNeighbors=5)
print("人脸的个数:",len(faces))

# 给检测到的人脸加矩形框
for (x, y, w, h) in faces:
    cv2.rectangle(p_color, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 展示检测到的人脸并加矩形框
plt.imshow(cv2.cvtColor(p_color, cv2.COLOR_BGR2RGB))
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

上述代码依次输出:
灰度图人脸个数加矩形框的人脸检测 \qquad 图片face1,haarcascade_frontalface_alt.xml和程序代码可以查看人脸数目检测

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/550052
推荐阅读
相关标签
  

闽ICP备14008679号