前言
在讲解后面的采样以及傅里叶变换之前,我们需要掌握python对图像的输入、输出以及显示等操作。
本篇涉及都是简单的图像显示保存等操作,但是后面基于此复杂的变换都会或多或少用到这些知识。所以,别看非常简单,应用起来还是非常多的。
使用PIL读取,保存和显示图像
在PIL包中,使用Image.open()函数读取磁盘图像。获取图像后,我们可以完整的获取图像的宽高,分辨率等信息。
from PIL import Image
img=Image.open("4.jpg")
print("图像宽度:"+str(img.width))
print("图像高度:"+str(img.height))
print("图像分辨率:"+img.format)
print("图像模式:"+img.mode)
img.show()
运行之后,图片这些信息都会完整的显示出来:
而对于识别图像内容来说,我们一般都是将图像转换为灰度图像。而PIL包转换为恢复图像的方式如下:
img=Image.open("4.jpg")
imgL=img.convert("L")
imgL.show()
运行之后,灰度图像会通过默认的电脑图片显示程序,显示出来。
至于存储图像,我们通过如下代码实现:
imgL.save("1111111.jpg")
使用matplotlib读取,保存和显示图像
在OpenCV中,我们对图像进行直方图处理的时候,会经常辅助用到matplotlib包。所以,我们有必要掌握matplotlib包读取,保存与显示图像。
from matplotlib.image import imread
import matplotlib.pyplot as plt
img = imread("4.jpg")#读取图像
print(img.shape, img.dtype, type(img))#输出图像的参数
plt.figure(figsize=(10, 10))
plt.axis("off")#不显示坐标轴
#显示图像
plt.imshow(img)
plt.show()
plt.savefig("11111.jpg")#保存图像
上面注释非常详细,这里就不在赘述。不过,其imshow()方法还有一个插值参数interpolation。
plt.imshow(img,interpolation="spline16")
通过interpolation参数,我们可以使用不同的插值对图像进行处理。
使用scikit-image读取,保存和显示图像
scikit-image包与PIL一样,可以读取图像后获取图像的详细参数信息。同时,它也可以与OpenCV一样进行色彩空间的转换。
from skimage import io,color
import matplotlib.pyplot as plt
img=io.imread("4.jpg")#读取图像
print(img.shape,img.dtype,type(img))#输出图像参数
plt.axis("off")#去除坐标轴
io.imsave("11111.jpg",img)#保存图像
hsv=color.rgb2hsv(img)#图像转换为hsv色彩空间
#显示图像
plt.imshow(hsv)
plt.show()
scikit-image与matplotlib读取后的格式都是numpy.ndarray。
下面是skimage库子模块:
模块 | 作用 |
---|---|
io | 读取,保存和显示图片和视频 |
color | 色彩空间变换 |
data | 提供一些测试图片和样本数据 |
filters | 图像增强,边缘检测,排序滤波器,自动阈值等 |
draw | 操作于numpy数组上的基本图形绘制,包括线条,矩阵,圆和文本等 |
transform | 几何变换和其他变换,如旋转,拉伸和Radon(拉东)变换等 |
exposure | 图像强度调整,例如,直方图均衡化等 |
feature | 特征检测和提取, 例如,纹理分析等 |
graph | 图论操作,例如,最短路径 |
measure | 图像属性测量,例如,相似度和轮廓 |
morphology | 形态学操作,如开闭运算,骨架提取等 |
novice | 简化的用于教学目的的接口 |
restoration | 修复算法,例如去卷积算法,去噪等 |
segmentation | 图像分割为多个区域 |
util | 通用工具 |
viewer | 简单图形用户界面用于可视化结果和探索参数 |