使用opencv读取的图片的形状以及颜色通道顺序

在读取一张图片,然后不做任何处理直接保存这张图片的时候,如果出现了颜色失真(如下,非常简单的代码),则很有可能是我们没有正确认识图片的颜色通道导致的。

import cv2
from torchvision.utils import save_image
from torchvision import transforms
image = cv2.imread('../gt/21.png')
to_tensor = transforms.ToTensor()
image = to_tensor(image)
save_image(image,'./a.png')

上面的代码使用opencv读取一张图片,然后直接把这张图片保存下来,结果如下图:左边是原图,右边是保存下来的图片,可以发现明显颜色不同了。

在这里插入图片描述

在自己研究torchvision下的utils下的save_image()函数的时候在这个地方卡了很久。为什么会出现这个问题呢?

其实是因为cv2(opencv)读取图片的形状和颜色通道的顺序的和正常的RGB不同的原因导致的,cv2读取的图片的形状为:(height, width, channels)。其中颜色通道默认为BGR,而不是RGB,所以在保存的时候就出现了问题。

总结:如果我们使用opencv(cv2)读取一张彩色图片,转化为张量或者是保存图片之前需要把通道顺序转化为RGB。

如果使用opencv(cv2)读取和保存图片,又想使用torchvision下的utils下的save_image方法的话,则正确的代码为:

import cv2
from torchvision.utils import save_image
from torchvision import transforms
image = cv2.imread('../gt/21.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
to_tensor = transforms.ToTensor()

image = to_tensor(image)
save_image(image,'./a.png')
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值