pytorh基础知识和函数的学习:图像文件的Tensor

news2024/11/14 7:11:04

     在深度学习和计算机视觉中,将图像文件转换为张量(Tensor)是数据预处理的重要步骤。Tensor 是一种多维数组,在 PyTorch 中,用于表示和处理数据。

首先,创建一个3*3的图像文件,放大之后,如下所示:

图像由红RGB(255,0 , 0),绿RGB(0,255 , 0),蓝RGB(0,0 , 255),黑RGB(0,0 , 0)四种颜色组成,图中的每一个方格是一个像素点。将其命名为demo33.png,并放置在下面的脚本同目录下:

from PIL import Image

# 读取图像文件
image = Image.open('demo33.png')   # 打开图像
img_data = image.getdata()       # 获取图像数据
data_list = list(img_data)               # 创建列表
print(data_list)      # 打印图像数据
out_list = []          # 创建空列表
for color in data_list:   # 遍历图像数据列表
    if color == (0, 0, 0):   # 判断像素点是否为黑色
        out_list.append('黑')
    elif color == (255, 0, 0):   # 判断像素点是否为红色
        out_list.append('红')
    elif color == (0, 255, 0):  # 判断像素点是否为绿色
        out_list.append('绿')
    elif color == (0, 0, 255):  # 判断像素点是否为蓝色
        out_list.append('蓝')
print(out_list)   # 打印图像数据
D:\Anaconda3\envs\torch110cu113py38\python.exe E:\AiDemos\ViT\demo4.py 
[(255, 0, 0), (0, 0, 0), (255, 0, 0), (0, 0, 0), (0, 255, 0), (0, 0, 0), (0, 0, 255), (0, 0, 0), (0, 0, 255)]
['红', '黑', '红', '黑', '绿', '黑', '蓝', '黑', '蓝']

 以上的脚本代码反映了图像的像素特征,可以看到,逐行逐列输出了图像的RGB像素值。

进一步,按照RGB的颜色通道输出:

from PIL import Image
from torchvision import transforms

# 读取图像文件
image = Image.open('demo33.png')
R_channel = image.getchannel("R")
R_data = R_channel.getdata()

G_channel = image.getchannel("G")
G_data = G_channel.getdata()

B_channel = image.getchannel("B")
B_data = B_channel.getdata()
print(list(R_data))
print(list(G_data))
print(list(B_data))
[255, 0, 255, 0, 0, 0, 0, 0, 0]  # R通道的数据
[0, 0, 0, 0, 255, 0, 0, 0, 0]  # G通道的数据
[0, 0, 0, 0, 0, 0, 255, 0, 255]  # B通道的数据

 现在将图像转换为张量(Tensor):

from PIL import Image
from torchvision import transforms

# 读取图像文件
image = Image.open('demo33.png')   # 打开图像

transform = transforms.ToTensor()  # 定义Tensor转换

# 应用转换,将图像转换为张量
image_tensor = transform(image)

print(image_tensor.shape)  # 输出Tensor的形状
print(image_tensor)  # 输出tensor的数值
torch.Size([3, 3, 3])   # Tensor的形状
tensor([[[1., 0., 1.],  # Tensor的R通道数据
         [0., 0., 0.],
         [0., 0., 0.]],

        [[0., 0., 0.],  # Tensor的G通道数据
         [0., 1., 0.],
         [0., 0., 0.]],

        [[0., 0., 0.],  # Tensor的B通道数据
         [0., 0., 0.],
         [1., 0., 1.]]])

脚本中transforms.ToTensor()的解释:将PIL图像或NumPy数组转换为PyTorch的张量,并将像素值范围从[0, 255]缩放到[0, 1]。

看得出,图像文件的Tensor,由RGB三个通道组成,每个像素点与255的比例值构成了阵列的基本元素。图像的所有行、所有列构成了Tensor的阵列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

终端防火墙软件功能 | 在终端设备上启用防火墙!终端安全小课堂开讲啦

终端设备的安全性直接关系到企业的整体网络安全,随着网络威胁的日益复杂和多样化,启用并合理配置终端防火墙软件是保障终端安全不可或缺的一环。 今天,我们将走进终端安全小课堂,详细解析安企神终端安全管理软件中的防火墙功能&a…

unity Android + WebGL 浏览器打开

1.切换为WebGL平台 2.打包的时候设置 3.放入FHS 手机打开这个链接即可 注意这是在局域网内

c++11异常

一、异常介绍 1、异常作用 异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的 直接或间接的调用者处理这个错误 2、异常操作 (1)throw 当问题出现时,程序会抛出一个异常。这是…

darnet 识别检测本地视频 保存本地视频

darnet 识别检测本地视频 保存本地视频 darknet的github下载 darknet的github下载 darknet地址 将这个下载后,保存在catkin_ws的src目录下

C语言 ——— 柔性数组

目录 柔性数组的概念以及定义 柔性数组的特点 柔性数组的使用 柔性数组的概念以及定义 概念: C99中,结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员 定义: struct st_type {int i;int a[0]; //柔性数组成员…

rpmbuild构建mysql-boost-5.7.42版本的rpm包

系列文章目录 rpmbuild入门 文章目录 系列文章目录前言一、准备工作1、mysql-5.7.42源码包下载2、准备mycnf配置文件3、mysqld.server配置文件准备4、检查服务器的cmake版本和gcc版本5、服务器安装依赖 二、编译构建0、rpmbuild目录树示例1、spec文件拆分解释2、源码包解压部分…

秋招力扣Hot100刷题总结——堆

1. 数组中的第K个最大元素 题目链接 题目要求:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) …

使用Jupyter Notebook实现Python编程

目录 1. 安装Anaconda 2. 启动Jupyter Notebook 3. 调试Python代码: 4. 定义一个简单的python类 ​5. 在控制台运行代码,并从命令行接受参数 6. 调用其他py文件中的类 ​7. conda环境切换和迁移 1. 安装Anaconda 到Anaconda官网下载安装包:Download Anaconda Distri…

Android - lock/unlock bootloader

在执行 adb remount 时高版本经常会提示失败 此时就需要对设备的进行解锁操作。记录两个部分,Google解锁和展锐解锁。 目录 一、Google解锁 二、展锐解锁 三、补充跳过按键检测的方案 一、Google解锁 官网介绍的unlock方法如下:锁定/解锁引导加载程序…

并发编程与并发安全

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(3)

💖💖💖亲爱的朋友们,热烈欢迎你们来到我的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博客&…

如何使用ssm实现基于HTML5的出租车管理系统

TOC ssm126基于HTML5的出租车管理系统jsp 绪论 1.1 选题背景 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以…

【数据结构5】二叉搜索树(插入、查询、删除)

1 二叉搜索树 1.1 二叉搜索树-插入 1.2 二叉搜索树-查询 1.3 二叉搜索树-删除 1 二叉搜索树 二叉搜索树是一颗二叉树且满足性质:设是二叉树的一个节点。 如果y是x左子树的一个节点&#xff0c;那么y.key< x.key;如果y是x右子树的一个节点&#xff0c;那么y.key > x.key。…

【非常困难】 猿人学web第一届 第10题 js 混淆 - 重放攻击对抗

文章目录 调试干扰第一个 debuggerHook 代码 第二个 debuggerHook 代码 第三个 Function.constructor.prototype 检测Hook 代码 完整的 Hook 代码 接口分析加密参数 m 生成位置加密参数还原加密点扣代码提示_yrxyA\$()var _yrxmEu _yrxWKg(_yrxyHJ...._yrxWKg() let result _…

命令执行漏洞-rce

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 1.1 命令执行漏…

47.x86游戏实战-VEHHOOK封包函数

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具

Aiseesoft Mac Video Converter Ultimate是一款视频转换与编辑软件&#xff0c;以其强大的功能和简单易用的操作界面赢得了广泛好评。该软件不仅支持多种视频格式的转换&#xff0c;还集成了丰富的视频编辑功能&#xff0c;满足了用户多样化的视频处理需求。 核心功能概述 视频…

mysqlcheck

mysql bin中的其他工具包 对于mysql的其他工具, 有很多选项是公共的, 例如你在对数据库进行检查的时候, 需要指定host和user以及其password来连接上mysqlserver来进行相关操作, 这个时候其实用到的host等东西跟我们之前的mysql-client其实是类似的 也就是说他们是作为mysql众…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

C++不同数据类型连接成一个字符串

在C中数据连接的方式使用号进行连接。 1.都是字符型时直接使用连接几个字符串&#xff1b; 2.不是字符类型时&#xff0c;要用to_string函数转换后再连接。