赞
踩
\qquad 计算机视觉(computer vision):机器试图理解所看到的目标。计算机视觉通过算法去尝试理解视觉信息,从而将理解转化为分类,决策,模式观察等等。
\qquad 物体检测、字符识别、指纹识别等等。
\qquad 计算机理解视觉信息,有两种方式,一种是自下而上(bottom-up),一种是自上而下(up-bottom)。两者的区别是计算机的注意机制不同。
\qquad 所谓计算机由下而上的理解视觉信息,是指计算机只关注图像中的兴趣区域,获取对象特征;
\qquad 所谓计算机由上而下的理解视觉信息,是指计算机关注图像中的整体区域,即通过全局信息来得到当前的图像关注点,利用背景的视觉信息获取对对象的理解。
\qquad
图像即数组。
\qquad
图像由一个个像素点组成,图像的单位面积像素点越多,图像的分辨率越高,而每个像素点我们可以由数字确定表示,计算机可以对这些表示像素点的数值进行处理,从而进行图像处理。
\qquad
每一张图像,我们都可以看成一个二维网格,每一个像素都是组成网格的最小单元。
\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的色彩组成原理,我们对图像做很多操作,比如图像分割,利用同一张图像中,不同物体对象间的色彩差异,查找对象间的边缘,从而对同一张图片中的不同对象进行分割;寻找角点,在对图像进行分割之后,查找图像以获得某些特征,也称为角点。
\qquad
我们使用python对图像进行处理,需要安装opencv-python,matplotlib等。
\qquad
5.1 读取图像
import cv2
import matplotlib.pyplot as plt
import time
p_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 plt
p_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 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()
\qquad plt.imshow(p_gray,cmap=‘gray’) plt.show()将灰度化的图像显示。
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和程序代码可以查看人脸数目检测
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。