【PyTorch】【机器学习】图片张量、通道分解&合成和裁剪

一、导入所需库

python 复制代码
from PIL import Image
import torch
import numpy as np
import matplotlib.pyplot as plt

二、读取图片

python 复制代码
pic = np.array(Image.open('venice-boat.jpg'))

上述代码解释:先用Image.open()方法读取jpg格式图片,再用np.array()方法将图片转成numpy数组(ndarray)格式。

三、建立张量

图片在PyTorch中以3维张量表示。以下代码将图片转换成张量形式:

python 复制代码
pic_tensor = torch.from_numpy(pic)

打印张量数据内容:

python 复制代码
print(pic_tensor)

输出:

python 复制代码
tensor([[[ 47, 138, 221],  # 每个像素点的RGB颜色值
         [ 49, 138, 220],
         [ 50, 139, 221],
         ...,
         [ 89, 149, 221],
         [ 87, 150, 221],
         [ 86, 149, 220]],

        [[ 47, 138, 221],
         [ 49, 138, 220],
         [ 50, 139, 221],
         ...,
         [ 88, 148, 220],
         [ 85, 148, 219],
         [ 85, 148, 219]],

        [[ 47, 138, 221],
         [ 49, 138, 220],
         [ 50, 139, 221],
         ...,
         [ 84, 147, 218],
         [ 84, 147, 218],
         [ 83, 146, 217]],

        ...,

四、通过张量对图片进行操作

(注:在以下的各个操作下,还需要用plt.show()语句才能将图片输出到屏幕上。)

1、打印整张图片

python 复制代码
plt.imshow(pic)

2、分RGB通道打印图片

输出通道1:
python 复制代码
plt.imshow(pic_tensor[:, :, 0].numpy())
输出通道2:
python 复制代码
plt.imshow(pic_tensor[:, :, 1].numpy())
输出通道3:
python 复制代码
plt.imshow(pic_tensor[:, :, 2].numpy())


注意: 三通道并不是简单的算术叠加,例如以下代码的输出和原图大相径庭:

python 复制代码
from PIL import Image
import torch
import numpy as np
import matplotlib.pyplot as plt


pic_1 = np.array(Image.open('Channel_1.jpg'))
pic_2 = np.array(Image.open('Channel_2.jpg'))
pic_3 = np.array(Image.open('Channel_3.jpg'))

pic_tensor_1 = torch.from_numpy(pic_1)
pic_tensor_2 = torch.from_numpy(pic_2)
pic_tensor_3 = torch.from_numpy(pic_3)

pic_tensor = pic_tensor_1 + pic_tensor_2 + pic_tensor_3
plt.imshow(pic_tensor.numpy())

plt.show()

输出图片:

3、裁剪图片

对图片张量的裁剪在其前2个维度上进行(第3个维度为颜色通道),示例代码如下:

python 复制代码
plt.imshow(pic_tensor[50: 1050, 400: 800, :].numpy())

裁剪结果:

相关推荐
IT_陈寒2 小时前
Vue这个坑我跳了两次,原来问题出在这
前端·人工智能·后端
weiwei228442 小时前
神经网络模型导出及开放标准格式ONNX
pytorch·onnx
新新技术迷2 小时前
Node给AI接口做SSE代理与鉴权
人工智能
redreamSo3 小时前
大模型是不是到顶了?瓶颈到底在哪
人工智能·openai
Oo9203 小时前
Tool Use 背后的技术逻辑
人工智能
姗姗来迟了3 小时前
Vue3封装AI流式对话组件踩坑实录
人工智能
码上天下3 小时前
用Pinia管理AI多会话状态
人工智能
用户054324329704 小时前
Next.js接大模型流式SSE实操踩坑
人工智能
Lihua奏4 小时前
# 机器学习:机器是怎么从数据里学出规则的
机器学习
Assby4 小时前
从 Function Calling 到 MCP:理解 Agent 工具调用的底层通信机制
人工智能·后端