写点什么

计算机视觉中 Python 如何实现图像操作与处理

作者:迷彩
  • 2022 年 7 月 27 日
  • 本文字数:1661 字

    阅读完需:约 5 分钟

前言

学习过 flask 动画制作或者视频编辑的童鞋应该都知道,我们平时所看到的流畅的视频画面都是由一帧一帧的图像构成的,比如我们以前读书的时候喜欢在书的边角处花一些动作不同的简笔画,当我们快速翻动书本的时候就好像我们的简笔画中的物体活了,就像在看动画一般.所以当我们需要对一个视频文件进行分析时,连续播放的视频并没有那么容易进行采样分析,在计算机视觉中对视频的分析通常都是对视频帧的分析.说白了,其实计算机视觉就是一们研究如何对图像中的信息进行自动提取的学科.

所以学习计算机视觉首先需要学会如何对图像进行处理,那在 Python 中我们都怎么处理图像的呢?

在 Python 中处理图像的库有很多,非常丰富,Python 的火热也正是得益于此,得益于社区的完善和活跃.这里我们选择常用的 PIL 图像处理库,它提供了我们通常使用的各种图像处理功能,比如:裁剪,旋转,缩放,颜色转换,模糊等等.其实 PIL 官方版本是以 Python2.X 的版本发行的,并没有针对 Python3.X 的 PIL 版本,我们在 Python3 中使用的 Pillow 库.是一群社区的志愿者在 PIL 的基础上建立的兼容版本,而且还在原来的基础上增加了其他新的功能.


准备

我们处理图像一般用到的库如下:

pillow,numpy,matplotlib 等

安装这些库很简单,这里推荐使用 anaconda 集成管理工具来进行安装相关的库,anaconda 中包含了多个常用于科学计算的库,如果使用命令安装可使用如下命令:

pip3 install pillowpip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码

如果你的 pip 不是最新版本的可使用以下命令更新升级,以免造成安装失败

python -m pip install --upgrade pip
复制代码

接下来我们小试牛刀,看看 PIL 是如何处理图像的


浅尝图像处理

我们先从找一张测试用的图:


from PIL import Imageimport matplotlib.pylab as plt
img1 = Image.open('t1.jpg') #打开图像img2 = img1.convert('L') #将图像转化成灰度图img2.resize((128,128)) #调整图片大小
plt.subplot(2,1,1)plt.imshow(img1)plt.subplot(2,1,2)plt.imshow(img2)plt.show()
复制代码

执行结果:

这个程序我们使用 PIL 库结合 matplotlib 库对图像进行灰度转换,并在将其绘制到坐标上

PIL 库中比较重要的模块就是 Image,它包含了图像的读取,保存等函数,比如我们以上的代码中.open(),顾名思议.就是打开图像,就跟文件处理.我们想要操作文件,修改文件的内容首先是打开并读取到文件原有的内容,能进行后续的处理.接着使用 convert()函数将图像转换成灰度图,因为在很多时候,图像本身的颜色会对我们要分析的信息造成干扰,而灰度图可以帮助我们更好地分析问题.接着我们使用 matplotlib 中 subplot 将多张图绘制到用户界面.


绘制图像的直方图

很多时候我们对一个图像进行分析的时候,图像的像素通常是一个很好的着手点.而图像的直方图则可以比较直观地展示图像的像素分布.通过绘制图像的直方图,可以进行图像检索,图像分割,图像分类......图像的直方图和数学中的直方图类似,将像素值范围划分成一定数目的小区间,每个小区间内就是落在该区间表示范围内的像素数目,用这种形式来呈现图像颜色的分布情况.

我们还是使用上面例子那种图:

from PIL import Imagefrom pylab import *import numpy as np
img1=np.array(Image.open('t1.jpg').convert('L'))figure()hist(img1.flatten(),128)show()
复制代码

执行结果:

这里使用 numpy 的 array()函数将图像转化为一个数组对象,用三元组表示像素点(行,列,颜色通道),直方图绘制使用 hits()函数.函数的第一参数是输入的图像,第二个参数指定划分的小区间的数目.hits()函数只能输入一维数组.所以需要对输入的图像做一些转换.这里我们用到了 flatten()函数先将数组按照行优先原则转化成一维数组,再利用 hits()绘制图像.


总结

本文我们了解到图像分析的基本流程和图像处理相关的库以及库的操作.计算机视觉中对与图像的操作远不止如此,本文只是浅尝辄止,比如常用的还有旋转,去噪,模糊,扭曲等等,在普通的验证的识别中,经常需要对验证码图片进行去噪处理,排除图像中无关的干扰素,让识别结果更加准确.除此之外,我们还可以结合更多其它的图像处理库,做出更好玩的东西.比如我之前写的使用 opencv 进行人的脸检测和识别


发布于: 刚刚阅读数: 3
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020.06.18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
计算机视觉中Python如何实现图像操作与处理_Python_迷彩_InfoQ写作社区