当前位置:网站首页>numpy PIL tensor之间的相互转换
numpy PIL tensor之间的相互转换
2022-08-03 01:40:00 【Mick..】
图片的读取通常有两种格式,一种是PIL,一种是opencv。两种读取方式存在一些区别
- 图片格式不同,Image读入的是“RGB”,Opencv读入的是“BGR”。
- 读入图片的尺寸不同,Image读入的是 w h,Opencv读入的是h w c。其中w是宽,h是高,c是通道数。
- Image读入是Image类无法直接显示其像素点的值(可以转换成numpy显示),Opencv读入的直接是numpy的格式。可以直接显示其像素值。
PIL和opencv读取图片
import os.path
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as transforms
##Image 读取图片
image = Image.open("1.jpg").convert("RGB")
##opencv 读取图片
image2 = cv2.imread("1.jpg")
print("Image read",image.size) # w h
print("Opencv read",image2.shape) # h w cPIL 读取的图片是PIL格式,需要转换为numpy或者tensor格式进行数据处理。opencv读取的图片直接就是numpy格式。
PIL与tensor的相互转换
可以利用torchvision中的transforms类中ToTensor()和ToPILImage()两个函数将PIL的格式和tensor格式互相转换。注意,转换后的像素点发生的变化.
import os.path
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as transforms
image = Image.open("1.jpg").convert("RGB")
image2 = cv2.imread("1.jpg")
image_tensor = transforms.ToTensor()(image)
image_recover = transforms.ToPILImage()(image_tensor)
image_tensor_add = image_tensor.unsqueeze(0) ##增加一维
print("Image read",image.size) # w h
print("Opencv read",image2.shape) # h w c
print("tensor",image_tensor.size()) #c h w
print("tensor recover to Image",image_recover.size)
print("tensor add ",image_tensor_add.size())numpy 和 tensor 相互转换
import os.path
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as transforms
#方法一:直接转换
image_tensor_from_numpy = transforms.ToTensor()(image)
print("image_tensor_from_numpy: ",image_tensor_from_numpy.shape)
#方法二
image_tensor_from_numpy2 = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) #先将 BGR 变为 RGB
image_tensor_from_numpy2 = torch.from_numpy(image_tensor_from_numpy2.transpose((2, 0, 1)))
# 将 (h,w,c)转换为 (c,h,w)
image_tensor_from_numpy2 = image_tensor_from_numpy2.float().div(255) #归一化到[0,1]
print("image_tensor_from_numpy2 :",image_tensor_from_numpy2.size())
image_numpy_form_Image = np.array(image)
image_numpy_form_Image = cv2.cvtColor(image_numpy_form_Image,cv2.COLOR_RGB2BGR)
print("image_numpy_form_Image ",image_numpy_form_Image.shape)
注意:PIL和opencv读取的图片格式不同,因此通常进行格式转换
参考文献:
pytorch中图片类型的转换——PIL、tensor、numpy_长歌丶采薇的博客-CSDN博客_pil转numpy
Pytorch中Tensor与各种图像格式(PIL 和 Numpy)的相互转化_Phoenixtree_DongZhao的博客-CSDN博客_pil 转化为numpy
边栏推荐
猜你喜欢

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

一个接口并发问题的模拟与复现

iNFTnews | 元宇宙的潜力:一股推动社会进步的力量

[Example构造方法增加notNull参数,默认false,允许值为null,值为null的时候不加入到条件中

MATLAB绘制填充图(X轴上下两种颜色)

吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第一节:深度学习概论

Greenplum database failure analysis, can not listen to the port

【Swoole系列3.3】单进程管理Process

【SQL】—数据库操作、表操作

新库上线 | CnOpenDataA股上市公司董监高信息数据
随机推荐
华为防火墙双机热备技术:HRP、VGMP、VRRP,三大技术值得一学!
提高测试覆盖率的四大步骤
一个循环,两个循环问题的思考及复现
2022/8/2 考试总结
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
简单的布局的初级智能文本提示器
容联云发送验证码
为什么要使用 playwright 做浏览器自动化测试?
【社媒营销】Facebook速推帖子如何运作?值得吗?
10. SAP ABAP OData 服务如何支持修改(Update)操作
Qt在选择MSVC 编译器的时候,无法识别出M_PI的问题处理
monkey 压测
阿南的对话
如何准备考pmp?
软件定义网络实验之SDN网络简单管理及开发
【深度学习】基于tensorflow的小型物体识别训练(数据集:CIFAR-10)
13-security其他.md
Latex-查看预收录在arXiv.org上论文的TeX源文件
OpenWRT设置ipv6网络
在表格数据上,为什么基于树的模型仍然优于深度学习?