写代码的时候一直记错库下对应的图片操作函数名以及他们的返回值类型,干脆写个笔记记录下。
图片读取相关的包:
- matplotlib
- PIL/
- cv2
- numpy
读取
matplotlib.pyplot / pylab
1 2 3 4 5 6 7 8
| import pylab as plt
import numpy as np img = plt.imread('examples.png') print(type(img), img.dtype, np.min(img), np.max(img))
[out] (<type 'numpy.ndarray'>, dtype('float32'), 0.0, 1.0)
|
注:pylab和pyplot区别:前者将numpy、以及各个功能函数导入了其命名空间中。这样会使pylab表现的和matlab更加相似。现在来说我们经常使用pyplot,因为pyplot相比pylab更加纯粹。
PIL.image.open
1 2 3 4 5 6 7 8 9 10
| from PIL import Image import numpy as np img = Image.open('examples.png') print(type(img), np.min(img), np.max(img)) img = np.array(img) print(type(img), img.dtype, np.min(img), np.max(img))
[out] (<class 'PIL.PngImagePlugin.PngImageFile'>, 0, 255) # 注意,PIL是有自己的数据结构的,但是可以转换成numpy数组 (<type 'numpy.ndarray'>, dtype('uint8'), 0, 255)
|
PIL读取的结果是Image格式的,需要再额外转换成np.array的形式
cv2.imread
1 2 3 4 5 6 7 8 9 10 11 12
| import cv2 import numpy as np img = cv2.imread('examples.png') img_gray = cv2.imread('examples.png', 0) print(type(img), img.dtype, np.min(img), np.max(img)) print(img.shape) print(img_gray.shape)
[out] (<type 'numpy.ndarray'>, dtype('uint8'), 0, 255) (824, 987, 3) (824, 987)
|
注意,pylab.imread和PIL.Image.open读入的都是RBG顺序,而cv2.imread读入的是BGR顺序,混合使用的时候要特备注意
保存
plt.savefig()
savefig()方法用于保存绘制数据后创建的图形。使用此方法可以将创建的图形保存到我们的本地计算机中。
1 2 3 4 5 6 7 8
| wordcloud = WordCloud(font_path=ciyunfont_path, mask=background_image, background_color='white').generate(cut_text) plt.figure(figsize=(8, 8)) if not os.path.exists(result_path): os.makedirs(result_path) plt.savefig(f'{result_path}/ciyun.png') plt.imshow(wordcloud, interpolation="bilinear")
|
注意, 使用savefig的话得注意与plt.show()的位置,如果先plt.show()
了则保存的是空白图片。
PIL.image - 保存PIL格式的图片
1 2 3 4 5
| from PIL import Image img = Image.open('examples.png') img.save('examples2.png') img_gray = img.convert('L') img_gray.save('examples_gray.png')
|
cv2.imwrite
1 2 3 4 5
| import cv2 img = cv2.imread('examples.png') cv2.imwrite('examples2.png', img) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imwrite('examples_gray.png', img_gray)
|
灰度图-RGB图相互转换
1 PIL.Image
1 2 3 4 5 6 7 8 9 10 11 12
| from PIL import Image img = Image.open('examples.png') img_gray = img.convert('L') img_rgb = img_gray.convert('RGB') print(img) print(img_gray) print(img_rgb)
[out] <PIL.PngImagePlugin.PngImageFile image mode=RGB size=987x824 at 0x7FC2CCAE04D0> <PIL.Image.Image image mode=L size=987x824 at 0x7FC2CCAE0990> <PIL.Image.Image image mode=RGB size=987x824 at 0x7FC2CCAE0250>
|
2 cv2(注意,opencv在读入图片的时候就可以通过参数实现颜色通道的转换,下面是用别的方式实现)
1 2 3 4 5 6
| import cv2 import pylab as plt img = cv2.imread('examples.png') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_bgr = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR) img_rgb = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2RGB)
|
from: numpy、cv2等操作图片基本操作