首页 > 其他分享 >预处理之转灰度图

预处理之转灰度图

时间:2022-10-29 19:31:07浏览次数:62  
标签:__ tensor img transform 之转 _. 灰度 transforms 预处理


预处理之转灰度图_1024程序员节

补充:transform.invert 预处理逆操作

from PIL import Image
from torchvision import transforms
import torch
import numpy as np

def transform_invert(img_, transform_train):
"""
将data 进行反transfrom操作
:param img_: tensor
:param transform_train: torchvision.transforms
:return: PIL image
"""
if 'Normalize' in str(transform_train):
# 分析transforms里的Normalize
norm_transform = list(filter(lambda x: isinstance(x, transforms.Normalize), transform_train.transforms))
mean = torch.tensor(norm_transform[0].mean, dtype=img_.dtype, device=img_.device)
std = torch.tensor(norm_transform[0].std, dtype=img_.dtype, device=img_.device)
img_.mul_(std[:, None, None]).add_(mean[:, None, None]) # 广播三个维度 乘标准差 加均值

img_ = img_.transpose(0, 2).transpose(0, 1) # C*H*W --> H*W*C

# 如果有ToTensor,那么之前数值就会被压缩至0-1之间。现在需要反变换回来,也就是乘255
if 'ToTensor' in str(transform_train):
img_ = np.array(img_) * 255

# 先将np的元素转换为uint8数据类型,然后转换为PIL.Image类型
if img_.shape[2] == 3: # 若通道数为3 需要转为RGB类型
img_ = Image.fromarray(img_.astype('uint8')).convert('RGB')
elif img_.shape[2] == 1: # 若通道数为1 需要压缩张量的维度至2D
img_ = Image.fromarray(img_.astype('uint8').squeeze())
else:
raise Exception("Invalid img shape, expected 1 or 3 in axis 2, but got {}!".format(img_.shape[2]))

return img_

if __name__ == '__main__':

img = Image.open(r"./test.jpg").convert('RGB')
img_transform = transforms.Compose([transforms.ToTensor()])
img_tensor = img_transform(img)
# img_tensor.unsqueeze_(dim=0) # C*H*W to B*C*H*W
print(img_tensor)
print(img_tensor.shape)

img = transform_invert(img_tensor, img_transform) # input: shape=[c h w]
img.show()

预处理之转灰度图_预处理_02

一 转灰度图:Grayscale

功能:将图片转换为灰度图

主要参数说明:

  1. num_ ouput channels: 输出通道数,只能设1或3
from PIL import Image
from torchvision import transforms
from utils import transform_invert


if __name__ == '__main__':
# 1.读取图像
img = Image.open(r"./cat.png").convert('RGB')
# 2.确定预处理方式
img_transform = transforms.Compose([## transforms.Resize((300,300)), # 重置大小为300*300
transforms.Grayscale(num_output_channels=3), # 色相
transforms.ToTensor() # 转Tensor型变量
])
# 3.进行预处理
img_tensor = img_transform(img)
# 4.逆Transform变换
img = transform_invert(img_tensor, img_transform) # input: shape=[c h w]
# 5.进行预处理效果展示
img.show()

预处理之转灰度图_预处理_03

二 随机转灰度图:RandomGrayscale

功能:依概率将图片转换为灰度图

主要参数说明:

  1. p:概率值,图像被转换为灰度图的概率
from PIL import Image
from torchvision import transforms
from utils import transform_invert


if __name__ == '__main__':
# 1.读取图像
img = Image.open(r"./cat.png").convert('RGB')
# 2.确定预处理方式
img_transform = transforms.Compose([## transforms.Resize((300,300)), # 重置大小为300*300
transforms.RandomGrayscale(p=0.9), # 转灰度图
transforms.ToTensor() # 转Tensor型变量
])
# 3.进行预处理
img_tensor = img_transform(img)
# 4.逆Transform变换
img = transform_invert(img_tensor, img_transform) # input: shape=[c h w]
# 5.进行预处理效果展示
img.show()

预处理之转灰度图_1024程序员节_04


标签:__,tensor,img,transform,之转,_.,灰度,transforms,预处理
From: https://blog.51cto.com/u_15088375/5806484

相关文章

  • 图像处理:ColorMap将灰度图像[0,1]区间上的像素值映射到RGB的[0,255]
    1.起因在做人群计数时,常常使用密度图来估计人数。密度图中每个像素的值都是介于0和1之间的浮点数,原本是灰度图。但是使用python的matplotlib.pyplot并指定cmap参数可以画......
  • c语言—程序环境和预处理进阶篇—笔记
    这章是一个c语言底层逻辑的总览,比较接近硬件,不难理解,这里给大家推荐一个c语言的在线练习网站​​https://www.dotcpp.com/oj/problemset.html​​因为只有通过大量的练习才......
  • 我摊牌了!真正的灰度队列实现方案!全网你都搜不到!
    背景目前,公司方面RPC调用如Dubbo、Feign已经能支持基于灰度的调用,但是MQ还没有支持灰度的能力,因此导致在测试和生产环境业务验证、消息隔离方面体验比较差,因此我们......
  • Opencv 图像处理:图像基础操作与灰度转化
    本文已收录于Opencv系列专栏:​​深入浅出OpenCV​​,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。图像属性1.图像格式图像压......
  • 1、图像预处理ImageDataGenerator
    1、介绍(1)图片生成器,负责生成一个批次一个批次的图片,以生成器的形式给模型训练;(2)对每一个批次的训练图片,适时地进行数据增强处理(dataaugmentation);数据增强处......
  • 【自然语言处理概述】数据预处理
    【自然语言处理概述】数据预处理作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家......
  • 预处理指令初步认识
    1.预处理指令1)。预处理指令的分类。a.文件包含指令。#includeb.宏定义#definec.条件编译指令#if2)。预处理指令的特点。a,都是以#号开头。b.预处理指令的后面没有分号......
  • vivo 鲁班平台 RocketMQ 消息灰度方案
    本文作者:区二立-vivo技术架构总监方案背景RocketMQ使用广泛,技术场景下,可以用于异步解耦,比如不同系统间调用业务链上做分段式处理或使用不同语言的两个系统间的解耦;......
  • vivo 鲁班平台 RocketMQ 消息灰度方案
    本文作者:区二立-vivo技术架构总监方案背景RocketMQ使用广泛,技术场景下,可以用于异步解耦,比如不同系统间调用业务链上做分段式处理或使用不同语言的两个系统间的解耦;可以用......
  • Elasticsearch 预处理没有奇技淫巧,请先用好这一招!
    手敲脑图串讲Elasticsearch核心知识点1、上问题1.1线上实战问题1——字符串切分es可以根据_id字符串切分,再聚合统计吗比如:数据1、_id=C12345数据2、_id=C12456数......