码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • numpy PIL tensor之间的相互转换


    图片的读取通常有两种格式,一种是PIL,一种是opencv。两种读取方式存在一些区别

    1. 图片格式不同,Image读入的是“RGB”,Opencv读入的是“BGR”。
    2. 读入图片的尺寸不同,Image读入的是 w h,Opencv读入的是h w c。其中w是宽,h是高,c是通道数。
    3. Image读入是Image类无法直接显示其像素点的值(可以转换成numpy显示),Opencv读入的直接是numpy的格式。可以直接显示其像素值。

    PIL和opencv读取图片 

    1. import os.path
    2. from PIL import Image
    3. import cv2
    4. import numpy as np
    5. import matplotlib.pyplot as plt
    6. import torchvision.transforms as transforms
    7. ##Image 读取图片
    8. image = Image.open("1.jpg").convert("RGB")
    9. ##opencv 读取图片
    10. image2 = cv2.imread("1.jpg")
    11. print("Image read",image.size) # w h
    12. print("Opencv read",image2.shape) # h w c

    PIL 读取的图片是PIL格式,需要转换为numpy或者tensor格式进行数据处理。opencv读取的图片直接就是numpy格式。

    PIL与tensor的相互转换

    可以利用torchvision中的transforms类中ToTensor()和ToPILImage()两个函数将PIL的格式和tensor格式互相转换。注意,转换后的像素点发生的变化.

    1. import os.path
    2. from PIL import Image
    3. import cv2
    4. import numpy as np
    5. import matplotlib.pyplot as plt
    6. import torchvision.transforms as transforms
    7. image = Image.open("1.jpg").convert("RGB")
    8. image2 = cv2.imread("1.jpg")
    9. image_tensor = transforms.ToTensor()(image)
    10. image_recover = transforms.ToPILImage()(image_tensor)
    11. image_tensor_add = image_tensor.unsqueeze(0) ##增加一维
    12. print("Image read",image.size) # w h
    13. print("Opencv read",image2.shape) # h w c
    14. print("tensor",image_tensor.size()) #c h w
    15. print("tensor recover to Image",image_recover.size)
    16. print("tensor add ",image_tensor_add.size())

    numpy 和 tensor 相互转换

    1. import os.path
    2. from PIL import Image
    3. import cv2
    4. import numpy as np
    5. import matplotlib.pyplot as plt
    6. import torchvision.transforms as transforms
    7. #方法一:直接转换
    8. image_tensor_from_numpy = transforms.ToTensor()(image)
    9. print("image_tensor_from_numpy: ",image_tensor_from_numpy.shape)
    10. #方法二
    11. image_tensor_from_numpy2 = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) #先将 BGR 变为 RGB
    12. image_tensor_from_numpy2 = torch.from_numpy(image_tensor_from_numpy2.transpose((2, 0, 1)))
    13. # 将 (h,w,c)转换为 (c,h,w)
    14. image_tensor_from_numpy2 = image_tensor_from_numpy2.float().div(255) #归一化到[0,1]
    15. print("image_tensor_from_numpy2 :",image_tensor_from_numpy2.size())
    1. image_numpy_form_Image = np.array(image)
    2. image_numpy_form_Image = cv2.cvtColor(image_numpy_form_Image,cv2.COLOR_RGB2BGR)
    3. 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 

  • 相关阅读:
    11.4-GPT4AllTools版本已开始对小部分GPT3.5用户内测推送
    8086汇编环境的使用
    并发工具类——CountDownLatch、CyclicBarrier、Semaphore、Exchanger的介绍与使用
    [oeasy]python0014_二进制_binary_bin
    磺酸基-Cy3 羧酸,磺化水溶性Cy3羧酸,sulfo CY3 COOH
    机器学习中的分类问题:如何选择和理解性能衡量标准
    受众分析与卸载分析全面升级,HMS Core分析服务6.6.0版本上新
    体感互动ar交互大屏设计方案
    Charles-ios无法抓包原因之一证书
    k8s基础知识扫盲及企业落地实践分享
  • 原文地址:https://blog.csdn.net/qq_40107571/article/details/126106379
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号