关于transform转变cv图片颜色不符的问题

在学习PyTorch时,注意到图片经过ToTensor处理后颜色反转,原因为cv2.imread读取的图片格式为BGR,而ToTensor期望的是RGB。解决方法是使用cv2.cvtColor将BGR图像转换为RGB,然后进行Tensor转换,以保持颜色正确。这样可以避免颜色混乱,确保图像在日志中正常显示。
部署运行你感兴趣的模型镜像

学习pytorch过程中,发现当cv图片经过ToTensor后颜色发生变化,黄色会变成蓝色,蓝色会变成黄色

 

 这是由于cv2.imread读取图片的时候,是通过BGR形式读取图片,而ToTensor默认以RGB模式,这样转变后会导致颜色完全相反。

正确做法应当是将imread之后的图片修改成RGB模式:

img=cv2.imread(img_path)
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#格式转换,
writer = SummaryWriter("logs")

tensor_trans=transforms.ToTensor()
tensor_img=tensor_trans(img_rgb)

writer.add_image("bee", tensor_img,3,dataformats="CHW")

 这样最后得到的图片颜色就是正常的

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 如何处理或生成灰度图像 灰度图像是通过将彩色图像的 RGB 值转换为单一强度值来生成的。这种转换通常基于人类视觉系统的特性,即人眼对不同颜色的敏感程度不同,因此采用加权平均的方式计算灰度值。 #### 加权平均法 一种常见的方法是使用加权平均公式来计算灰度值: \[ \text{Gray} = 0.3 \times R + 0.59 \times G + 0.11 \times B \] 这种方法考虑到了人眼对绿色更为敏感的特点[^1]。通过这种方式生成的灰度图像能够更好地反映人眼感知的颜色分布。 以下是几种实现灰度图像转换的技术方案: --- #### 方法一:C# 实现灰度图像转换 在 C# 中可以通过 `Bitmap` 类逐像素访问并修改其颜色属性完成灰度化过程。具体代码如下所示: ```csharp public void GrayScale(Bitmap image) { int width = image.Width - 1; int height = image.Height - 1; Color color; for (int i = width; i >= 0; i--) { for (int j = height; j >= 0; j--) { // 获取当前像素的颜色信息 color = image.GetPixel(i, j); // 计算灰度值 int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); // 设置新的像素值 Color colorResult = Color.FromArgb(255, gray, gray, gray); image.SetPixel(i, j, colorResult); } } } ``` 此方法利用了循环遍历每个像素点,并应用上述提到的人类视觉权重公式进行灰度变换[^2]。 --- #### 方法二:Python 使用 Skimage 库批量转换 Skimage 是 Python 的一个强大工具箱,支持多种图像处理功能。下面展示了一个简单的脚本用于将目录下的所有 JPG 文件转化为固定尺寸的灰度图像。 ```python from skimage import io, transform, color import numpy as np def convert_gray(f, **args): rgb = io.imread(f) # 读取原始图片数据 gray = color.rgb2gray(rgb) # 转换成灰度模式 dst = transform.resize(gray, (64, 64)) # 改变分辨率至指定大小 return dst datapath = 'D:/input_image3' # 输入路径定义 str_path = datapath + '/*.jpg' coll = io.ImageCollection(str_path, load_func=convert_gray) for idx in range(len(coll)): output_file = r'd:/input_image4/' + np.str(idx) + '.bmp' io.imsave(output_file, coll[idx]) ``` 这段程序不仅实现了单张彩照向黑白照片的变化,还提供了自动化处理大批量素材的能力[^3]。 --- #### 方法三:OpenCV-Python 进行高效转换 对于追求性能的应用场景来说,OpenCV 提供了一种快速简便的方式来执行同样的任务。只需几行简洁明了的语句即可达成目标。 ```python import cv2 from PIL import Image # 加载原图 color_img = cv2.imread(r'E:\Pycharm\Python\DS-05.jpg') # 可选预缩放步骤 resized_img = cv2.resize(color_img, (300, 300), interpolation=cv2.INTER_CUBIC) # 执行色彩空间转变 gray_img = cv2.cvtColor(resized_img, cv2.COLOR_RGB2GRAY) # 将 NumPy 数组形式的结果保存回磁盘作为新文件 gray_pil = Image.fromarray(gray_img) gray_pil.save('output_gray.jpg') ``` 这里采用了 OpenCV 自带的功能模块简化流程,同时借助 Pillow 来辅助存储最终成果[^4]。 --- ### 总结 无论是手动编写逻辑还是调用第三方库函数,都可以有效地达到把彩色影像转变为仅有亮度层次的效果的目的。选择哪种方式取决于实际需求和个人偏好等因素影响。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值