Python中读取,显示,保存图片的方法

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

(一) opencv:

import cv2 as cv
# load 
img = cv.imread(imagepath)
# shape=(height, width, channel)
h,w,c = img.shape
# show
cv.imshow('window_title', img)
# save
cv.imwrite(savepath, img)

(二) matplotlib:

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np

# load
img = mpimg.imread('cat.jpg') 
# 此时 img 就已经是一个 np.array 了,可以对它进行任意处理
# height, width, channel=(360, 480, 3)
h,w,c = img.shape 

# show
plt.imshow(img) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()

# save
# 适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture
plt.savefig('fig_cat.png')

注意到:

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

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

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

matplotlib 扩展:2. 将np.array保存为图像、直接保存np.array

# 2.1 np.array=>image file
from scipy import misc
misc.imsave('img_new_sz.png', img_new_sz)
"""
from scipy import misc
# load image
lena = misc.imread('lena.png')
# <type 'numpy.ndarray'>
type(lena) 
# lena.shape, lena.dtype
"""

# 2.2 np.array=>np data file
import numpy as np
np.save('img_new_sz', img_new_sz) # 会在保存的名字后面自动加上.npy
img = np.load('img_new_sz.npy') # 读取前面保存的数组

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

(三) PLT:

加载并显示图像(part 1)

from PIL import Image
# load
im = Image.open('cat.jpg')

# show
im.show()

# 返回 image's size w,h = (480, 360)
w,h = img.size

# PIL.JpegImagePlugin.JpegImageFile
type(img)

# 直接调用Image类的save方法
img.save('new_cat.png')

加载并显示图像(part 2)

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

PIL图片和numpy数组间的转换

"""
# PIL Image => np.array
# 也可以用 np.asarray(im),区别是 
# np.array() 是深拷贝,np.asarray() 是浅拷贝
"""
im_array = np.array(im)

"""
这里采用 matplotlib.image 读入图片数组
注意: 
这里读入的数组是 float32 型的,范围是 0-1;
PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换;
"""
import matplotlib.image as mpimg
from PIL import Image
img = mpimg.imread('cat.jpg') # 这里读入的数据是 float32 型的,范围是0-1
# 方法转换之后显示效果不好
img = Image.fromarray(np.uint8(img*255))
img.show()

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


参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值