deep-learning - 在深度学习中加载图像时如何快速连接图像的 4 个角?
问题描述
如图所示,连接 4 个角的最有效方法是什么?(在getitem () 中进行)
left_img = Image.open('image.jpg')
...
output = right_img
解决方案
我就是这样做的。首先,我会暂时将图像转换为张量图像
from torchvision import transforms
tensor_image = transforms.ToTensor()(image)
现在假设您有一个 3 通道图像(尽管类似的原理适用于任意数量通道的任何矩阵,包括 1 通道灰度图像)。
您可以找到带有tensor_image[0]
绿色通道的红色通道和带有tensor_image[1]
的蓝色通道tensor_image[2]
您可以制作一个 for 循环遍历每个通道,例如
for i in tensor_image.size(0):
curr_channel = tensor_image[i]
现在在每个通道的 for 循环中,您可以提取
- 带有浮点数的第一个角像素(curr_channel[0][0])
- 带有浮点数的最后一个顶角像素(curr_channel[0][-1])
- 带有浮点数的底部第一个像素(curr_channel[-1][0])
- 带有浮点数的底部和最后一个像素(curr_channel[-1][-1])
确保在下一个附加步骤之前将所有像素值转换为浮点值或双精度值
现在您有四个值对应于每个通道的角像素然后您可以创建一个列表,然后您可以new_image = []
使用 Now 附加上述像素值,
new_image.append([[curr_channel[0][0], curr_channel[0][-1]], [curr_channel[-1][0], curr_channel[-1][-1]]])
在遍历每个通道后,您应该有一个包含三个(或 tensor_image. size(0)) 列表列表的数量。
下一步是通过运行将此列表列表转换为 torch.tensor
new_image = torch.tensor(new_image)
为了确保一切正常 new_image.size() 应该返回 torch.Size([3, 2, 2])
如果是这种情况,您现在有了想要的图像,但它是张量格式。将其转换回 PIL 的方法是运行
final_pil_image = transforms.ToPILImage()(new_image)
如果一切顺利,您应该有一个可以完成任务的 pil 图像。它使用的唯一代码是智能索引和一个 for 循环。但是,如果您看起来比我看的更多,那么您可以避免使用 for 循环并在没有循环的所有通道上执行操作。
萨塔克耆那教
推荐阅读
- apache-httpclient-4.x - HttpClient5 - 更改/删除了很多 API
- javascript - 前端:使用反应中的一些设置变量访问数组中的项目
- express - 带有 msal 节点的 Azure AD:如何获取用户配置文件?
- python - 如何为流水线式多输出分类器绘制树?
- ajax - Laravel/Ajax DELETE:“在 null 上调用成员函数 delete()”
- powerbi - 添加一个工具提示,将给出特定持续时间的类别百分比
- ios - 从给定 MKMapView 的当前边界获取纬度/经度的大小
- windows - 如何直接从 Windows 10 资源管理器 GUI 使用选项 ( someprogram.exe -someoption ) 运行文件
- node.js - 如何在带有 node.js 的 ejs 文件中使用 sqlite3 数据库?
- android - 自 Android Studio 4.2 以来,没有可见的可调试进程