当前位置:   article > 正文

Python中读取-显示-保存图片的三种方法_plt保存图片的函数

plt保存图片的函数

Python中操作图像的方法包括opencv,matplotlib,PIL

opencv:

  1. import cv2 as cv
  2. # load
  3. img = cv.imread(imagepath)
  4. # shape=(height, width, channel)
  5. h,w,c = img.shape
  6. # show
  7. cv.imshow('window_title', img)
  8. # save
  9. cv.imwrite(savepath, img)

matplotlib

  1. import matplotlib.pyplot as plt # plt 用于显示图片
  2. import matplotlib.image as mpimg # mpimg 用于读取图片
  3. import numpy as np
  4. # load
  5. img = mpimg.imread('cat.jpg')
  6. # 此时 img 就已经是一个 np.array 了,可以对它进行任意处理
  7. # height, width, channel=(360, 480, 3)
  8. h,w,c = img.shape
  9. # show
  10. plt.imshow(img) # 显示图片
  11. plt.axis('off') # 不显示坐标轴
  12. plt.show()
  13. # save
  14. # 适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture
  15. plt.savefig('fig_cat.png')

注意到:  
* plt.imshow(image)中的图片的数据类型可以使np.array类型 
* mpimg 既提供了加载图像函数imread,又提供了保存图像函数imsave 
* plt.savefig函数 可以将显示在fig中图像保存下来

待补充mpimg.imsave()和plt.savefig()使用demo。


  matplotlib 扩展:
  
  1.图像缩放、显示
 

  1. from scipy import misc
  2. lena_new_sz = misc.imresize(img, 0.5) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸
  3. plt.imshow(img_new_sz)
  4. plt.axis('off')
  5. plt.show()

matplotlib 扩展:

2. 将np.array保存为图像、直接保存np.array

  1. # 2.1 np.array=>image file
  2. from scipy import misc
  3. misc.imsave('img_new_sz.png', img_new_sz)
  4. """
  5. from scipy import misc
  6. # load image
  7. lena = misc.imread('lena.png')
  8. # <type 'numpy.ndarray'>
  9. type(lena)
  10. # lena.shape, lena.dtype
  11. """
  12. # 2.2 np.array=>np data file
  13. import numpy as np
  14. np.save('img_new_sz', img_new_sz) # 会在保存的名字后面自动加上.npy
  15. img = np.load('img_new_sz.npy') # 读取前面保存的数组

注意: np.array数据可以通过np.save函数直接保存在磁盘上,扩展名为.npy, 通过np.load函数直接恢复; scipy.misc提供了对numpy.array格式图像的处理函数,特别是misc.imsave函数可以直接将np.array数据保存成图像文件。

PIL:

加载并显示图像(*)

  1. from PIL import Image
  2. # load
  3. im = Image.open('cat.jpg')
  4. # show
  5. im.show()
  6. """
  7. # 返回 image's size w,h = (480, 360)
  8. w,h = img.size
  9. # PIL.JpegImagePlugin.JpegImageFile
  10. type(img)
  11. # 直接调用Image类的save方法
  12. img.save('new_cat.png')
  13. """

加载并显示图像(**)

  1. from PIL import Image
  2. import matplotlib.pyplot as plt
  3. img=Image.open('/home/wanghao/Pictures/001.jpg')
  4. plt.figure("head")
  5. plt.imshow(img)
  6. plt.show()

PIL图片和numpy数组间的转换

  1. """
  2. # PIL Image => np.array
  3. # 也可以用 np.asarray(im),区别是
  4. # np.array() 是深拷贝,np.asarray() 是浅拷贝
  5. """
  6. im_array = np.array(im)
  7. """
  8. 这里采用 matplotlib.image 读入图片数组
  9. 注意:
  10. 这里读入的数组是 float32 型的,范围是 0-1;
  11. PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换;
  12. """
  13. import matplotlib.image as mpimg
  14. from PIL import Image
  15. img = mpimg.imread('cat.jpg') # 这里读入的数据是 float32 型的,范围是0-1
  16. # 方法转换之后显示效果不好
  17. img = Image.fromarray(np.uint8(img*255))
  18. img.show()

 注意: numpy转PIL Image后显示效果很差,不如 转成numpy后使用matplotlib显示好

总结

在可以选择使用哪个图像库最终显示图像的时候,个人觉得使用 matplotlib库集成好的函数去直接加载和显示图像(来自matplotlib的image.imread 或 PIL的Image.open)效果更好; 
将内存中结果整个保存成图片的时候,要优先考虑 转成 np.array后使用 scipy.misc保存成图片;


 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/744259
推荐阅读
相关标签
  

闽ICP备14008679号