OpenCV(30)---图像的输入输出与显示

202 阅读3分钟

前言

在讲解后面的采样以及傅里叶变换之前,我们需要掌握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。

控制台

HSV

下面是skimage库子模块:

模块作用
io读取,保存和显示图片和视频
color色彩空间变换
data提供一些测试图片和样本数据
filters图像增强,边缘检测,排序滤波器,自动阈值等
draw操作于numpy数组上的基本图形绘制,包括线条,矩阵,圆和文本等
transform几何变换和其他变换,如旋转,拉伸和Radon(拉东)变换等
exposure图像强度调整,例如,直方图均衡化等
feature特征检测和提取, 例如,纹理分析等
graph图论操作,例如,最短路径
measure图像属性测量,例如,相似度和轮廓
morphology形态学操作,如开闭运算,骨架提取等
novice简化的用于教学目的的接口
restoration修复算法,例如去卷积算法,去噪等
segmentation图像分割为多个区域
util通用工具
viewer简单图形用户界面用于可视化结果和探索参数