python 读取和保存图片方法

方法一、PIL读取方式

(1)打开文件指令为Image.open(‘house.jpg’),Image.open(‘house.jpg’).convert(‘L’)
(2)打开后图像格式为PIL.JpegImagePlugin.JpegImageFile image, 通道顺序为RGB;灰度图则分别为None和mode=L;
(3)需要使用nd.array()转换为array格式的矩阵,
(4)保存时再用Image.fromarray()转换回图像 (5)保存指令为imgname.save(‘imgsavename.*’)。

from PIL import Image
import numpy as np
I = Image.open('./0.png')
print(type(I))       #--->
print(I.size)        #--->(1280, 720)
I.show()
I.save('./save.png')
I_array = np.array(I)
print(type(I_array))  #--->
print(I_array.shape)  #--->(720, 1280, 3)
I1 = Image.fromarray(I_array) #-->
print(type(I1))  #-->
print(I1.size)        #--->(1280, 720)

方法二、CV2读取方式

(1)读入指令为cv2.imread(‘house.jpg’),cv2.imread(‘house.jpg’,cv2.IMREAD_GRAYSCALE)
(2)读入图像为nd.array格式矩阵,注意颜色频道BGR的顺序,
(3)保存指令为cv2.imwrite(‘imgsavename.*’,imgname)。

如果显示图像时做了BGR2RGB,则在保存前应该做RGB2BGR,否则存的图频道颠倒。

import cv2
I = cv2.imread('./0.png')
b, g, r = cv2.split(img) #像素分离
cv2.namedWindow('input_image', cv2.WINDOW_AUTOSIZE)
I = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY) #灰度化
cv2.imshow('input_image', I)
cv2.imwrite('./save1.png', I)
print(type(I))    #--->
print(I.shape)    #--->(720, 1280, 3)
#参数=0:(也可以是小于0的数值)一直显示,不会有返回值,若在键盘上按下一个键即会消失,则会返回一个按键对应的ascii码值       
#参数>0:显示多少毫秒,超过这个指定时间则返回-1
cv2.waitKey(0)
cv2.destroyAllWindows()

方法三、用 skimage 库读取方式

(1)读入彩色图像指令为 io.imread(‘house.jpg’),读入图片的数据格式为uint8,三通道RGB格式,与cv2同
(2)读入灰度图像指令为io.imread(‘house.jpg’,as_grey=True), 读入图片的数据格式为float,数值在0到1之间

from skimage import io
#   ski读入彩色图
img_ski = io.imread('house.jpg') 
io.imshow(img_ski)                                      # io.imshow显示图像
io.imsave('house_skisave.jpg',img_ski)                  # io.save保存图像
img_skisave = plt.imread('house_skisave.jpg')           # plt读入图像
print(img_ski.dtype)
print(img_ski.size)
print(img_ski.shape)
print(img_ski)
#   ski读入灰度图
imgray_ski = io.imread('house.jpg',as_grey=True) 
print(imgray_ski.dtype)
print(imgray_ski.size)
print(imgray_ski.shape)
print(imgray_ski)
io.imsave('house_gray_ski.jpg',imgray_ski)

方法四、图像处理库 Scipy

读出来是 array 形式,并且按照(H,W,C)形式保存

import matplotlib.pyplot as plt
from scipy.misc import imread, imsave
I = imread('./0.png')
print(type(I))       #--->
print(I.shape)       #--->(720, 1280, 3)
print(I.size)        #--->2764800
imsave('./save1.png', I)
plt.imshow(I)
plt.show()

方法五、利用 matplotlib

(1)读入指令为plt.imread(),
(2)保存指令为plt.savefig(‘imgsavename.*’),且一定在plt.show()之前;
plt.savefig将当前窗口内的内容保存,包括白边。

import matplotlib.pyplot as plt
fig = plt.figure('house')
img_plt = plt.imread('house.jpg')
plt.imshow(img_plt)
plt.savefig('house_pltsave.jpg')           # 一定在plt.show()之前
plt.show()
img_pltsave = plt.imread('house_pltsave.jpg')

你可能感兴趣的:(python 读取和保存图片方法)