• Python中读取、显示和保存图片的方法


    方法一:利用 PIL 中的 Image 函数

    这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array(im)函数将其处理成array格式。
    区别:np.array() 是深拷贝,np.asarray() 是浅拷贝。浅拷贝只拷贝父对象,不会拷贝对象的内部的子对象;深拷贝会拷贝对象及其子对象。

     1 from PIL import Image
     2 import numpy as np
     3 
     4 #读取
     5 image = Image.open('fur.jpg')
     6 #显示
     7 image.show()
     8 #保存
     9 image.save('new.jpg')
    10 #转换成array
    11 im_array = np.array(image)
    12 print(im_array.shape)
    13 #array转换成image
    14 img = Image.fromarray(np.uint8(im_array))
    15 img.save('new1.jpg') #还可以指定图片质量img.save('new1.jpg',quality=95),默认值为75

    方法二:利用 matplotlib

    利用 matplotlib.pyplot as plt 用于显示图片;利用matplotlib.image as mpimg 用于读取图片,并且读取出来就是 array 格式。

     1 import matplotlib.pyplot as plt
     2 import matplotlib.image as mpimg
     3 import numpy as np
     4 
     5 img = mpimg.imread('fur.jpg')
     6 print(img.shape)
     7 plt.imshow(img) #该函数负责对图像进行处理,并显示其格式,但不能显示,其后跟着plt.show()才能显示出来
     8 plt.axis('off') #不显示坐标轴
     9 plt.show()
    10 plt.savefig('new.jpg')

    方法三:利用 OpenCV-Python 接口

    cv2.imread() 读出来同样是 array 形式,但是如果是单通道的图,读出来的是三通道的。

    1 import cv2
    2 
    3 img = cv2.imread('fur.jpg')
    4 h,w,c = img.shape
    5 cv2.imshow('window_title', img)
    6 cv2.waitKey(5000) #里面的参数表示延迟多少毫秒,默认为0.当参数小于等于0时,可以理解为延迟无穷大毫秒,就是暂停了。不使用该函数的话会发现图片一闪而过,观察不到。
    7 cv2.imwrite('new2.jpg',img)

    方法四:图像处理库 Scipy

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

    1 import scipy.misc
    2 import matplotlib.pyplot as plt
    3 
    4 img = scipy.misc.imread('fur.jpg')
    5 scipy.misc.imsave('new3.jpg',img)
    6 plt.imshow(img)
    7 plt.show()
  • 相关阅读:
    跨平台开发得力助手
    一分钟将你的WPF应用程序变身成炫彩动态Metro风格
    因.Net Target Framework导致的编译错误
    WCF笔记
    WCF元数据发布的2种方式:httpGetEnabled与mex
    使用ClickOnce发布应用程序
    TFS笔记
    升级镁光M4固态硬盘的固件
    Android调用RESTful WCF服务
    用原生的android SDK与PhoneGap分别做了个示例,发现PhoneGap的要慢得多
  • 原文地址:https://www.cnblogs.com/piaojianxue/p/10822024.html
Copyright © 2020-2023  润新知