1、 什么是计算机视觉
计算机视觉又称为机器视觉(Machine Vision),顾名思义是一门“教”会计算机如何去“看”世界的学科。是指用摄像机和电脑及其他相关设备,对生物视觉的一种模拟。它的主要任务让计算机理解图片或者视频中的内容,就像人类和许多其他生物每天所做的那样。在机器学习大热的前景之下,计算机视觉与自然语言处理(Natural Language Process, NLP)及语音识别(Speech Recognition)并列为机器学习方向的三大热点方向。
计算机视觉应用非常广泛,有图像处理(picture processing)、图像分类(Image Classification)、目标检测(Object Detection)、图像分割(Image Segmentation)、人脸检测与识别 (Face Detection and Recognition)、OCR(Optical Character Recognition,光学字符识别)等。
起初我们可以将其任务目标拆分为:
让计算机理解图片中的场景(办公室,客厅,咖啡厅等)
让计算机识别场景中包含的物体(宠物,交通工具,人等)
让计算机定位物体在图像中的位置(物体的大小,边界等)
让计算机理解物体之间的关系或行为(是在对话,比赛或吵架等),以及图像表达的意义(喜庆的,悲伤的等)
2、图像处理
2.1 什么是图像处理?
一幅图像可以定义成一个二维空间函数,即 I = f(x,y),I 是二维空间,x和y是空间中的坐标,f是位于二维空间中x和y坐标处的灰度值,即使在计算机中可以把图像看做一个矩阵。
图像处理(狭义)是对输入图像进行某种变换得到输出图像,是一种图像到图像的过程。主要指对图像进行各种操作以改善图像的视觉效果,或对图像进行压缩编码以减少所需存储空间或传输时间、传输通路的要求,包括图像增强、图像恢复和重建,以及图像编码。
2.2 计算机视觉和图像处理的关系
图像处理旨在处理原始图像以应用某种变换,其目标通常是改进图像或将其作为某项特定任务的输入,而计算机视觉的目标是描述和解释图像。计算机视觉使用机器学习技术建模图像处理。计算机视觉应用机器学习来识别用于解释图像的模式。就像人类视觉的视觉推理过程一样;我们可以区分对象,对它们进行分类,根据它们的大小对它们进行排序等等。
2.3、python中的图像处理
2.3.1Python安装PIL
PIL仅支持到Python2.7以下的版本,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,如果我们python的版本比较高,我们可以直接安装使用Pillow。
安装Pillow需要对应满足版本的pip,所以安装前最好更新一下pip,不然容易安装失败!
python -m pip install --upgrade pip
然后在命令行下直接通过pip安装:
pip install pillow
安装完成之后,我们就可以在命令行输入:
pip list
我们就可以看到安装好的pip和Pillow的版本了。
1.1打开图片
from PIL import Image
#打开图片
image = Image.open("jmu.jpg")
image.show()
1.2彩色图像转换成灰色图像
from PIL import Image
#转换成灰度图像
image = Image.open("jmu.jpg").convert('L')
image.show()
1.3转换图片格式(.jpg→.png)
from PIL import Image
#转换图片格式
im = Image.open("D:/pycharm/cnn/jmu.jpg")
im.save("D:/pycharm/cnn/jmu.png")
1.4创建缩略图
缩略图(thumbnail image)指的是将原图缩小至一个指定大小(size)的图像。通过创建缩略图可以使图像更易于展示和浏览。
from PIL import Image
# 读取图片
img = Image.open('D:/pycharm/cnn/jmu.jpg')
# 制定缩略尺寸
img.thumbnail((500, 100))
print("缩略图尺寸:", img.size)
1.5 复制和粘贴图像区域
(1)复制:copy()方法
使用 crop()方法可以从一幅图像中裁剪指定区域:
box = (left, top, right, bottom)
img.crop(box) # img是读取的图片对象
(left, top, right, bottom),表示矩形左上角与右下角的坐标。
(2)粘贴:paste方法
该函数的作用是将一张图片粘贴至另一张图片中,粘贴后的图片模式将自动保持一致,不需要进行额外的转换。
paste(image, box=None, mask=None)
- box:指定图片被粘贴的位置或者区域,其参数值是长度为 2 或者 4 的元组序列,长度为 2 时,表示具体的某一点 (x,y);长度为 4 则表示图片粘贴的区域,此时区域的大小必须要和被粘贴的图像大小保持一致。
- mask:可选参数,为图片添加蒙版效果。
from PIL import Image
# 读取图片
img = Image.open('D:/pycharm/cnn/jmu/xyl01.jpg')
box = (100,100,300,300)
region = img.crop(box)
region.show()
region = region.transpose(Image.ROTATE_180)
img.paste(region,box)
img.show()
1.6 调整尺寸和旋转
(1)调整尺寸
在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。
from PIL import Image
# 读取图片
img = Image.open('D:/pycharm/cnn/jmu/xyl01.jpg')
# 调整尺寸
img1 = img.resize((125, 125))
# 输出图片
img1.show()
(2)旋转
Image 类提供了函数rotate(),可以任意角度旋转
from PIL import Image
# 读取图片
img = Image.open('D:/pycharm/cnn/jmu/xyl01.jpg')
# 旋转90°
img1 = img.rotate(90)
# 输出图片
img1.show()