pytorch tensor计算三通道均值

这篇博客介绍了在PyTorch中处理图像时计算均值的两种方法:通过numpy转换和直接在tensor上操作。针对含有0值的情况,提出了排除0值计算均值的解决方案,并详细展示了维度调整以进行加法运算的过程。内容涵盖了tensor与numpy之间的转换、非零元素均值计算以及维度匹配等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天用pytorch处理图像时,涉及到了计算均值的问题,整理一下解决思路。

第一种思路:tensor转换为numpy再进行处理。

import torch
import cv2
img = cv2.imread("image path")
tensor_img = torch.from_numpy((img[:, :, ::-1] / 255.0)[None, ...].transpose(0, 3, 1, 2)).cuda()

...

numpy_img = (tensor_img.detach().cpu().numpy().transpose(2, 3, 1, 0).squeeze() * 255)[:, :, ::-1]

ave_color = np.mean(numpy_img , axis=(0, 1))

如果图像里有0值,不想计入运算:

numpy_img[numpy_img == 0] = np.nan
ave_color = np.nanmean(numpy_img, axis=(0, 1))

由于tensor和numpy来回转换会消耗资源、性能。又查了一番,直接在tensor中计算(非零均值计算)

reshape_tensor_img = tensor_img.view(tensor_img.size(0), tensor_img.size(1), -1)
ave_color = reshape_tensor_img.mean(2)

# mean value without 0
non_zero_img = reshape_tensor_img[reshape_tensor_img.nonzero(as_tuple=True)]
ave_color = non_zero_img.view(reshape_tensor_img.size(0), reshape_tensor_img.size(1), -1).mean(2)

计算完均值,想要加法运算的时候也会碰上一点维度上的麻烦,需要维度转换一下。

reshape_ave_color = ave_color.view(ave_color.size(0), ave_color.size(1), 1, 1)
add_img = tensor_img + reshape_ave_color

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值