今日学习:图像预处理

一.整体代码:
2024/2/1 08:42:31

def process_img(self, img):
        img = np.ascontiguousarray(img)
        img = torch.from_numpy(img).to(self.device)
        img = img.half() if self.half else img.float()  # uint8 to fp16/32
        img /= 255.0  # 图像归一化
        if img.ndimension() == 3:
            img = img.unsqueeze(0)
        return img
二.逐行解读

这段代码定义了一个名为process_img的方法,它负责将图像数据从其原始格式准备到适合模型处理的格式。


def process_img(self, img):

这是方法的定义,process_img接受一个参数img,这是待处理的图像数据。


img = np.ascontiguousarray(img)

这一行将输入的图像img转换为一个连续的数组。在内存中连续分布的数组(C型连续)可以提高某些操作的性能。


img = torch.from_numpy(img).to(self.device)

 将NumPy数组转换为PyTorch张量,并将其传递到指定的设备上(通常是CPU或CUDA/显卡)。


img = img.half() if self.half else img.float() # uint8 to fp16/32

这里根据实例属性self.half的值决定将图像数据转换为半精度浮点数(fp16)还是单精度浮点数(fp32)。通常原始图像数据类型是uint8,这一步是必要的类型转换以配合模型的要求。


img /= 255.0 # 图像归一化 

归一化图像数据,将像素值从范围[0, 255]变换到[0.0, 1.0]。这一步是常规的预处理步骤,有助于模型学习。


if img.ndimension() == 3:

        img = img.unsqueeze(0) 

如果图像张量是三维的(即只有高度、宽度和颜色通道),这里添加一个额外的维度,将其变为四维张量。这通常是模型期望的批量维度(即使是单张图像,也需要这个批量维度)。


return img 

 最后,返回处理后的图像张量。


整个方法的目的是将图像从原始的字节表示转换成模型能够处理的张量格式,并进行必要的类型转换和归一化。这样的预处理步骤对于确保模型能够正确理解和处理输入图像至关重要。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值