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

这篇具有很好参考价值的文章主要介绍了PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、PIL,cv2读取数据图片以及之间的转换

这里先列个表格方便理解清楚:

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()
相互之间转换显示 Image.fromarray(cv2.cvtColor(img,
cv2.COLOR_BGR2RGB))
a=numpy.array(a)#先转换为数组
a=cv2.cvtColor(a,cv2.COLOR_RGB2BGR)
#转变颜色通道
转换为数组类型 cv2读取的就是数组类型 a = numpy.array(a)

直接来看代码:

#cv2显示图像
img_path="E:\expression_recognition\\1.jpg"
img_cv2 = cv2.imread(img_path)  # cv2读取的是数组类型  BGR  H W C
cv2.imshow("img_cv2", img_cv2)
cv2.waitKey (0)

#PIL显示图像
img_path="E:\expression_recognition\\1.jpg"
img_PIL = Image.open(img_path)  # PIL读取的是PIL类型  RGB  W H C
img_PIL.show()

#cv2转变为PIL进行图像显示
img_path="E:\expression_recognition\\1.jpg"
img_cv2 = cv2.imread(img_path)  # cv2读取的是数组类型  BGR  H W C
img_cv2_PIL = Image.fromarray(cv2.cvtColor(img_cv2,cv2.COLOR_BGR2RGB))
img_cv2_PIL.show()

#PIL转变为cv2进行图像展示
img_path="E:\expression_recognition\\1.jpg"
img_PIL = Image.open(img_path)  # PIL读取的是PIL类型  RGB  W H C
img_PIL = numpy.array(img_PIL)#先转换为数组   H W C
img_PIL_cv2 = cv2.cvtColor(img_PIL,cv2.COLOR_RGB2BGR)
cv2.imshow("img_PIL_cv2",img_PIL_cv2)
cv2.waitKey (0)

都会显示为如下图片。
PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换

二、PIL,数组类型以及tensor类型的转换

1、PIL转换为tensor类型(包含CPU和GPU)

主要有两种方式:

transforms.ToTensor() torch.from_numpy
能转换的格式 PIL和数组格式 只能转换数组格式
具体转换过程 a = transforms.ToTensor()
a(img_PIL)
a(img_array)
torch.from_numpy(img_array)

注意:PIL变为数组是由(W H C)转变为(H W C)

下面是具体的代码实例:

# 1、PIL转换为tensor的CPU、GPU格式
img_path="E:\expression_recognition\\1.jpg"
img_tensor = transforms.ToTensor()

img_PIL = Image.open(img_path)  # PIL读取的是PIL类型  RGB  W H C
img_PIL_tensor_CPU = img_tensor(img_PIL)
img_PIL_tensor_GPU = img_tensor(img_PIL).cuda()

2、数组转换为tensor类型(包含CPU和GPU)

# 1、数组转换为tensor的CPU、GPU格式
img_path="E:\expression_recognition\\1.jpg"
img_tensor = transforms.ToTensor()


img_PIL = Image.open(img_path)  # PIL读取的是PIL类型  RGB  W H C
img_array = numpy.array(img_PIL)  # PIL转换为数组类型  H W C
img_array_tensor1_CPU = img_tensor(img_array)  # 将数组格式转换tensor格式
img_array_tensor1_GPU = img_tensor(img_array).cuda()

img_array_tensor2_CPU = torch.from_numpy(img_array)
img_array_tensor2_GPU = torch.from_numpy(img_array).cuda()   

3、tensor类型转换为数组类型

注意在tensor类型转换为数组类型中,tensor类型只能是cpu tensor类型文章来源地址https://www.toymoban.com/news/detail-439129.html

img_cpu.numpy()   #cpu类型直接转换
img_gpu.cpu().numpy()   #gpu类型先转换为cpu类型然后再转换为数组类型

4、tensor、数组类型转换为PIL类型

tensor(可以是GPU也可以是CPU)转换为PIL格式 数组转换为PIL格式
第一步 img_array = numpy.uint8(img_array) img_tensor = img_tensor.float()
第二步 a = transforms.ToPILImage()
img_PIL = a(img_array)
a = transforms.ToPILImage()
img_PIL = a(img_tensor)
img_path="E:\expression_recognition\\1.jpg"
img = Image.open(img_path)
img_array = numpy.array(img)
a1 = transforms.ToTensor()
img_tensor = a1(img)

# 1、数组转换为PIL格式
a2 = transforms.ToPILImage()
img_array = numpy.uint8(img_array)  # 满足类型需求
img_PIL = a2(img_array)

# 2、tensor转换为PIL格式
img_tensor = img_tensor.float()  # 满足类型需求
img_PIL = a2(img_tensor)

三、CPU tensor类型与GPU tensor类型的转换

img_gpu = cpu_img_tensor.cuda() #cpu转换为gpu
img_cpu = gpu_img_tensor.cpu()  #gpu转换为cpu

四、对二和三进行一个总结

CPU tensor GPU tensor PIL array
CPU tensor
(cpu_img_tensor)
cpu_img_tensor.cuda() a = transforms.ToPILImage()
img_tensor = img_tensor.float()
img_PIL = a(img_tensor)
cpu_img_tensor.numpy()
GPU tensor
(gpu_img_tensor)
gpu_img_tensor.cpu() 同cpu tensor的转换方式 gpu_img_tensor.cpu().numpy()
PIL
(img_PIL)
a = transforms.ToTensor()
a(img_PIL)
a = transforms.ToTensor()
a(img_PIL).cuda()
numpy.array(img_PIL)
array
(img_array)
a = transforms.ToTensor()
a(img_array)

torch.from_numpy(img_array)
a = transforms.ToTensor()
a(img_array).cuda()

torch.from_numpy(img_array).cuda()
a = transforms.ToPILImage()
img_array=numpy.uint8(img_array)
img_PIL = a2(img_array)
注意PIL与cv2转换要变换颜色通道。

到了这里,关于PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • tensor与numpy的相互转换

    1. numpy转tensor 命令1:torch.tensor() 注意 : 命令2:torch.as_tensor() 命令3:torch.from_numpy() 区别:转换之后,numpy.array和tensor中的数据是否仍指向相同的内存地址 torch.from_numpy(np.array) 和 torch.as_tensor() ,均会指向相同的内存地址。 torch.tensor()不会指向相同的内存地址,是深度copy。从

    2023年04月08日
    浏览(27)
  • 解决yolov5的报错:WARNING Environment does not support cv2.imshow() or PIL Image.show()

    这几天在用yolo v5训练模型调用电脑摄像头的时候遇到了这个报错,尝试了很多办法去解决,比如用pip卸载opencv再重新下载和跟换opencv的版本,或者更改yolo里的代码,但是都没有解决问题。 后来发现在我卸载了opencv后,pycharm里的cv2模块依然可以被调用,所以应该是pip的unins

    2024年02月07日
    浏览(77)
  • cv2读取视频-并保存图像或视频

    @TOC cv2读取视频的一般流程 获取视频 cap = cv2.VideoCapture() 判断获取的视频是否成功,成功读取视频对象则返回True。 cap.isOpened() 按帧读取 ret, frame = cap.read() 展示图像 cv2.waitKey(1) 读取本地文件视频并展示

    2024年02月11日
    浏览(47)
  • cv2.imread读取中文路径解决方案

    import cv2 import numpy as np

    2024年02月11日
    浏览(41)
  • 【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()

    对图像进行颜色空间的转换 对图像进行阈值化/二值化

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

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

    2024年02月13日
    浏览(44)
  • opencv-python[cv2]读取中文路径图像

    随着AI人工智能的不断发展,图像处理这门技术也越来越重要,很多学校本科都开启了图像处理这门课程,学习图像处理开发,自然就绕不开opencv-python[ cv2 ]这个由intel主导的开源库。 cv2 是指OpenCV的Python接口库。 OpenCV (Open Source Computer Vision Library)是一个开源的计算机视觉库

    2024年02月06日
    浏览(74)
  • 用 Image 和 cv2 库读取 BMP 图 像

    本次内容中包含了图片的读取和写入,以及“图片融合”、‘图片拼接’、‘图片的灰度直方图展示’ 使用深度为8位24位的格式为bmp的图片,存放在“file”文件夹,实现位数为8和24的BMP图像读取和存储,并绘制其对应的灰度直方图。 (1)导入标准库numpy,赋给对象np,用于

    2024年02月08日
    浏览(29)
  • 使用OpenCV的cv2.imread函数读取图像介绍

    在计算机视觉和图像处理应用中,读取图像是一个常见的操作。OpenCV是一个广泛使用的图像处理库,它提供了 cv2.imread 函数,用于读取图像。本文将详细介绍如何使用 cv2.imread 函数,包括参数和用法。 首先,确保你已经安装了OpenCV库。你可以使用以下命令来安装OpenCV(如果尚

    2024年02月05日
    浏览(75)
  • cv2.VideoCapture使用,opencv读取摄像头,视频图像

            cv2.VideoCapture()用于读取视频,也可以用于读取摄像头图像。         上面的2种写法,第一种表示读取摄像头,第二种读取视频文件,返回值就是视频数据。         在读取到视频后,可以使用isOpened方法来判断视频是否能够打开,能打开返回True,不能够打

    2024年02月12日
    浏览(80)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包