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 读取图像
import cv2
import matplotlib.pyplot as plt
import timep_color = cv2.imread('F:\dog.jpg')
print(p_color.shape)
print(p_color)
\qquad通过cv.imread()可以读取图片,生成数值矩阵,上面这张dog图片的矩阵形状为520×\times× 600×\times× 3,是一张彩色图像。
\qquad 5.2 彩色图像灰度化,opencv是对灰度图像进行处理,所以需要把彩色图像处理为灰度图像。
import cv2
import matplotlib.pyplot as pltp_color = cv2.imread('F:\dog.jpg')
p_gray = cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY)
print(p_gray.shape)
\qquad通过cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY),将p_color转换为灰度图片,上述代码输出矩阵为520×\times× 600。
\qquad 5.2 矩阵图像的可视化
import cv2
import matplotlib.pyplot as pltp_color = cv2.imread('F:\dog.jpg')
p_gray = cv2.cvtColor(p_color,cv2.COLOR_BGR2GRAY)
plt.imshow(p_gray,cmap='gray')
plt.show()
\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()
上述代码依次输出:
\qquad图片face1,haarcascade_frontalface_alt.xml和程序代码可以查看人脸数目检测