python读取和保存图⽚5种⽅法对⽐python读取和保存图⽚5种⽅法对⽐
python中对象之间的赋值是按引⽤传递的,如果需要拷贝对象,需要⽤到标准库中的copy模块
⽅法⼀:利⽤ PIL 中的 Image 函数
对象图片高清这个函数读取出来不是 array 格式,这时候需要⽤ np.asarray(im) 或者 np.array()函数。
区别:np.array() 是深拷贝,np.asarray() 是浅拷贝
copy.deepcopy 深拷贝拷贝对象及其⼦对象
例⼦:
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引⽤
c = py(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
需要好好理解⼀下深拷贝和浅拷贝
from PIL import Image
import numpy as np
I = Image.open('./cc_1.png')
I.show()
I.save('./save.png')
I_array = np.array(I)
print I_array.shape
⽅法⼆:利⽤ matplotlib
利⽤ matplotlib.pyplot as plt ⽤于显⽰图⽚
matplotlib.image as mpimg ⽤于读取图⽚
并且读取出来就是 array 格式
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
I = mpimg.imread('./cc_1.png')
print I.shape
plt.imshow(I)
⽅法三:利⽤ OpenCV-Python 接⼝
cv2.imread() 读出来同样是 array 形式,但是如果是单通道的图,读出来的是三通道的。
import cv2
I = cv2.imread('./cc_1.png')
print I.shape
⽅法四:图像处理库 Scipy
图像的存取笔者⼀般喜欢⽤ scipy 这个库⾥的东西
读出来是 array 形式,并且按照(H,W,C)形式保存
import matplotlib.pyplot as plt
from scipy import misc
import scipy
I = misc.imread('./cc_1.png')
scipy.misc.imsave('./save1.png', I)
plt.imshow(I)
plt.show()
⽅法五:⽤ skimage 库
from skimage import io,data
img=data.lena()
io.imshow(img)
关于存储⽅式主要⽤两种:
当对象是图⽚时,使⽤ object.save(path)函数
当对象时⼆维数组时,使⽤ misc.imsave(path,object)函数
python读取图⽚的5种⽅法使⽤⾮常简单,⼤家可以在⾃⼰机器上测试⼀下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。