发布时间:2021-07-27 15:23:03编辑:run阅读(3434)
文件格式:
图像文件可以有不同的格式,其中流行的格式包括BMP(8位,24位,32位),PNG,JPG,JPEG,GIF,PPM,PNM,TIFF等。
python图像处理将读取图像,并提取数据和一些有用的信息(图像尺寸,类型/模式和数据类型)
从一种文件格式转换为另一种文件格式,将PNG格式转换为JPG格式,
例:
from PIL import Image im = Image.open(r'D:\image_processing\111.png') print(im.mode) # RGB 模式 im.save(r'D:\image_processing\111.jpg')
但如果PNG文件是在RGBA模式下,则需要将其保存为JPG格式之前将其转换为RGB模式后,才能转换,否则报错
from PIL import Image im = Image.open(r'D:\image_processing\222.png') print(im.mode) im.convert('RGB').save(r'D:\image_processing\222.jpg')
图像类型(模式)
单通道模式。每个元素由单个值表示。包括二值(单色)图像(每个像素由一个0~1表示)和灰度图像(每个像素由8位表示,其值通常在0~255内)都是单通道图像
多通道图像。每个元素由一组值表示。多通道图像包括三通道图像和四通道图像。
2.1 三通道图像。RGB图像和HSV图像都是三通道图像。RGB图像的每个像素由三元组(r,g,b)值表示,这三个值分别表示每个像素的红色,绿色和蓝色的通道颜色值。HSV图像的每个像素由三元组(h,s,v)值表示,这三个值分别表示每个像素的色调(颜色),饱和度(色彩,即颜色与白色的混合程度)和值(亮度,即颜色与黑色的混合程度)的通道颜色值。HSV模型描述颜色的方式与人眼感知的方式是相似的。
2.2 四通道图像。RGBA图像的每个元素由四元组(r,g,b,a)值表示,其中最后一个通道表示透明度。
一种图像模式转换为另一种图像模式,例可以将RGB图像转换为灰度图像:
from skimage.io import imread, imsave, imshow, show, imread_collection, imshow_collection im = imread(r'D:\image_processing\image_material\111.jpg', as_gray=True) print(im.shape) imshow(im) show()
将某些图像转换为灰度图像时,可能会丢失一些信息(失真).
使用color模块中的rgb2gray函数,彩色图像和灰度图像并排显示
例:
from skimage.io import imread from skimage import color import matplotlib.pylab as plt im = imread(r'D:\image_processing\image_material\555.jpg') im_g = color.rgb2grey(im) plt.subplot(121),plt.imshow(im, cmap='gray'),plt.axis('off') plt.subplot(122),plt.imshow(im_g, cmap='gray'),plt.axis('off') plt.show()
数字很明显几乎看不清楚了。
颜色空间-通道
图像的几个常用通道/颜色空间包括RGB,HSV,XYZ,YUV,YIQ,YPBPR,YCBCR和YDBDR,使用仿射映射将图像从一个颜色空间转换到另一个颜色空间。
例:将图像从RGB颜色空间转换为HSV颜色空间
from skimage.io import imread from skimage import color import matplotlib.pylab as plt # 指定默认字体 plt.rcParams['font.sans-serif'] = ['KaiTi'] # 解决保存图像是负号'-'显示为方块的问题 plt.rcParams['axes.unicode_minus'] = False im = imread(r'D:\image_processing\image_material\666.jpg') im_hsv = color.rgb2hsv(im) plt.gray() plt.figure(figsize=(10,8)) plt.subplot(221), plt.imshow(im_hsv[...,0]), plt.title('H通道', size=20), plt.axis('off') plt.subplot(222), plt.imshow(im_hsv[...,1]), plt.title('s通道', size=20), plt.axis('off') plt.subplot(223), plt.imshow(im_hsv[...,2]), plt.title('v通道', size=20), plt.axis('off') plt.subplot(224), plt.imshow(im), plt.title('原图', size=20), plt.axis('off') plt.show()
存储图像的数据结构
PIL使用Image对象存储图像,而scikit-image使用numpy ndarray数据结构存储图像数据,如何在这两种数据结构之间进行转换。
转换图像数据结构.
import matplotlib.pylab as plt import numpy as np from PIL import Image im = Image.open(r'D:\image_processing\image_material\a.jpg') im = np.array(im) imshow(im) plt.axis('off') show()
将numpy ndarray转换为PIL的image对象
from skimage.io import imread from PIL import Image im = imread(r'D:\image_processing\image_material\a.jpg') am = Image.fromarray(im) am.show()
下一篇: python3-基本图像操作
47745
46237
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6315°
5836°
5888°
6985°
5829°
5846°
6361°
6316°
7673°