第一种:PIL读取方式
from PIL import Image I = Image.open('./0.png') print(type(I)) #--->print(I.size) #--->(1280, 720) I.show() I.save('./save.png')
第二种:imread读取方式
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()
第三种:cv2读取方式
import cv2 I = cv2.imread('./0.png') 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()
第三种:程序处理过程中的图片裁取
tensor格式的图
facecut = im0[int(xyxy[1].item()):int(xyxy[3].item()), int(xyxy[0].item()):int(xyxy[2].item())]
图片格式的相互转换:
from PIL import Image import numpy as np I = Image.open('./0.png') print(type(I)) #--->print(I.size) #--->(1280, 720) I_array = np.array(I) print(type(I_array)) #---> print(I_array.shape) #--->(720, 1280, 3)
from PIL import Image from scipy.misc import imread I = imread('./0.png') print(type(I)) #--->print(I.shape) #--->(720, 1280, 3) print(I.size) #--->2764800 I = Image.fromarray(I) print(type(I)) #---> print(I.size) #--->(1280, 720)
import cv2 from PIL import Image I = cv2.imread('./0.png') print(type(I)) #--->print(I.shape) #--->(720, 1280, 3) I = Image.fromarray(I) print(type(I)) #---> print(I.size) #--->(1280, 720)
总结:
1. 'numpy.ndarray'的形状为(H, W, C),而'PIL.Image.Image'的形状为(W, H)。
2. 'numpy.ndarray'的形状属性为.shape,而'PIL.Image.Image'的形状属性为.size。
Image、cv2、io这三种读取的图片位深度都为16,那么保存的图片的位深度分别为:16、8、8。
转载于:https://www.cnblogs.com/czz0508/p/10846702.html