已解决
PIL、OpenCV、numpy处理图像格式的相互转化方式
来自网友在路上 157857提问 提问时间:2023-09-19 20:37:03阅读次数: 57
最佳答案 问答题库578位专家为你答疑解惑
PIL、OpenCV、numpy处理图像格式的相互转化方式
- 1、PIL 读取、显示、保存图片
- 2、OpenCV 读取、显示、保存图片
- 1、采用 matplotlib 显示以 OpenCV 读取的图片
- 3、numpy 和 Image 的相互转换
- 1、Image 转换成 numpy
- 2、numpy 转换成 Image
1、PIL 读取、显示、保存图片
from PIL import Image# PIL 读取、显示、保存图片
path = "D:/Deeplearning/img/dog.jpg"
image = Image.open(path) # PIL Image 类型
print(image.size) # (650, 433), 即(W, H)image.show() # 显示图片
image.save('new_image.jpg')
2、OpenCV 读取、显示、保存图片
OpenCV读取图像后返回的是一个代表图像的NumPy数组,采用的格式是 H×W×C,通道顺序为BGR
import cv2path = "D:/Deeplearning/img/dog.jpg"
image = cv2.imread(path) # 返回的是 numpy 数组
print(image.shape) # (433, 650, 3), 即 (H, W, C)cv2.imshow("Image", image)
cv2.waitKey(0) # 暂停显示图片,数字0代表按键后 0 ms执行cv2.imwrite("new_image.jpg", image) # 保存图片
1、采用 matplotlib 显示以 OpenCV 读取的图片
使用matplotlib绘图时,可以读取tesnor和numpy数据类型,图片通道顺序为RGB,且尺寸为(H,W,C)。
# 采用 matplotlib 显示以 OpenCV 方式读取的图片(numpy)
import matplotlib.pyplot as plt
# 在 jupyter 中需要加上下面一行代码
# %matplotlib inline# OpenCV 的通道顺序为 BGR
# 用 matplotlib 绘图时,需将其转换成 RGB 才能正常显示
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# image = image[:, :, ::-1] # 这是另一种 BGR 转换成 RGB的方式plt.imshow(image) # 显示图片
plt.axis("off") # 不显示坐标轴
plt.show()
3、numpy 和 Image 的相互转换
1、Image 转换成 numpy
使用np.array(image)和np.asarray(image)可以将 PIL Image 图像转换成 numpy 数组。
path = "D:/Deeplearning/img/dog.jpg"
image = Image.open(path) # PIL Image 类型image_array = np.array(image) # 深拷贝,通道顺序是 RGB, (H,W,C)
print(type(image_array)) # numpy.ndarrayplt.imshow(image_array) # 正常显示图片
plt.axis("off")
plt.show()
image_array2 = np.asarray(image) # 浅拷贝,通道顺序是 RGB,(H,W,C)
print(type(image_array)) # numpy.ndarray
2、numpy 转换成 Image
使用Image.fromarray(np.uint8(image))进行转换。
path = "D:/Deeplearning/img/dog.jpg"
image = cv2.imread(path) image = image[:,:,::-1] # OpenCV 的通道顺序为 BGR, 转换成RGBimage_pil = Image.fromarray(np.uint8(image))
print(type(image_pil)) # PIL.Image.Imageimage_pil.show() # 显示正常
使用Image.fromarray(image.astype(‘uint8’)).convert(‘RGB’)进行转换,效果相同。.png格式的图像是4通道的,加.convert(‘RGB’)可以将其转变成3通道。
image_pil2 = Image.fromarray(image.astype('uint8')) # .convert('RGB')
print(type(image_pil2)) # PIL.Image.Image
使用torchvision.transforms.ToPIL()也可以实现 numpy 到 PIL Image 的转换。
from torchvision import transforms
trans = transforms.ToPILImage()
image_pil3 = trans(image)
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"PIL、OpenCV、numpy处理图像格式的相互转化方式":http://eshow365.cn/6-9546-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!