PIL、OpenCV、numpy处理图像格式的相互转化方式

这篇具有很好参考价值的文章主要介绍了PIL、OpenCV、numpy处理图像格式的相互转化方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 cv2

path = "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.ndarray

plt.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, 转换成RGB

image_pil = Image.fromarray(np.uint8(image))
print(type(image_pil))  # PIL.Image.Image

image_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 的转换。文章来源地址https://www.toymoban.com/news/detail-731103.html

from torchvision import transforms
trans = transforms.ToPILImage()
image_pil3 = trans(image)  

到了这里,关于PIL、OpenCV、numpy处理图像格式的相互转化方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换

    这里先列个表格方便理解清楚: cv2 PIL 读取 a=cv2.imread() a=Image.open() 读取类型 数组类型 PIL类型 读取颜色通道 BGR RGB(这里需要注意的是当图像格式为RGBA时,PIL读取的是RGBA) 读取尺寸排列 (H,W,C) (W,H,C) 显示图片 cv2.imshow(“a”, a) cv2.waitKey (0) a.show() 相互之间转换显示 Ima

    2024年02月03日
    浏览(30)
  • 16bit深度图保存方式:opencv png格式和numpy npy格式对比

    通过激光雷达或深度估计得到的深度图一般为float32或float64类型数据,具有超大量数据,保存为常见的jpg格式图像(uint8:80-255)时则会损失数据精度,如果保存为.npy文件时则文件大小过大(eg:1280*1920大小的深度数组保存后所占空间为37.5Mb),因此需要处理下数据再进行保存

    2024年02月12日
    浏览(34)
  • 『CV学习笔记』Opencv和PIL Image以及base64编码互相转化

    Opencv和PIL Image以及base64编码互相转化

    2024年02月13日
    浏览(29)
  • 直线(二维)的表达方式及其相互转化 c++

    直线表达方式有三种如下: 1) a x + b y + c = 0    ( 1 ) ax+by+c=0 space space(1) a x + b y + c = 0     ( 1 ) 这是代数表达方式,也是通用的表达方式,其中法向量为 s = ( − b , a ) s=(-b, a) s = ( − b , a ) 。 2) y = k x + b y=kx+b y = k x + b 这是点斜方式。它很好理解,但是它不能表达垂直于

    2024年02月12日
    浏览(29)
  • 深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化

    在深度学习中,第一步要做的往往就是 处理数据集 ,尤其是学习百度飞桨PaddlePaddle的小伙伴,数据集经常要用Voc格式的,比如性能突出的ppyolo等模型。所以学会 数据集转化 的本领是十分必要的。这篇博客就带你一起进行Yolo与Voc格式的相互转化,附详细代码! Yolo数据集主要

    2024年01月17日
    浏览(33)
  • anaconda 安装matplotlib 、PIL 、opencv、numpy、mediapipe、skimage、torch torchvision torchaudio、imutils、onnx

    【安装matplotlib】 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib==3.5.2 【安装PIL】(如果已经安装了matplotlib,则无需单独安装) pip install pillow 【安装opencv】 pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv-python==3.4.11.45 pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv-contrib-

    2024年01月24日
    浏览(34)
  • rgb与hsi空间详解及其相互转化(python+opencv)

    效果图: 原图----------- rgb-hsi ----------- 加入噪声后hsi-rgb 实现代码: rgb图片到hsi图片并加入噪声的相互转化 对于单色(灰度)图像而言,其每个像素的亮度用一个数值表示即可;而彩色图像的每个像素包含了颜色信息,每个像素的光强度和色度须用3个数值描述。彩色图像的

    2024年02月05日
    浏览(28)
  • OpenCV和PIL图像对象转换

    OpenCV和PIL(Python Imaging Library)都是常用的Python图像处理库。它们都有自己的图像对象类型,因此在使用它们时需要进行相应的转换。 下面是OpenCV图像对象和PIL图像对象之间的转换方法: 将OpenCV图像对象转换为PIL图像对象: 将PIL图像对象转换为OpenCV图像对象: 需要注意的是

    2024年02月13日
    浏览(30)
  • Matlab 实现图像的直角坐标系和极坐标系的相互转化

    某日需要在matlab进行图像的的极直互化,发现并没有介绍相应内容的文章,所以有了自己调研一下并写一写的想法。果然只要想就能做到,所以有了下面这篇文章。 根据直角坐标系(笛卡尔系)内数值和极坐标系关系 根据上述公式不难想出,在直角坐标系中的圆会在极坐标

    2024年02月11日
    浏览(28)
  • Python -- 图像处理—PIL库的使用

    PIL库的使用 要点:PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素、色彩操作功能,还可以用于图像归档和批量处理。 1.PIL库概述 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装。安装PIL库的方法如下,需要注意,安装库的名字是

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包