cv2和torchvision读取图像函数的比较

摘要:本文介绍并比较了cv2.imread和torchvision.io.read_img两种读取图像的方法。


引言

在通过PytTorch处理图像时,torchvision是一个强有力的工具包。而OpenCV是传统计算机视觉影响力最大的库,在Python中使用numpy对图像处理。它们都提供了读取图像的接口。

本文在实验时分别用了两者的接口读取COCO数据集中的图像,然而,COCO数据集中有彩图和灰度图,两中读图函数在处理时通道数可能不同,导致后续处理时报错。故此,本文梳理比较了二者读取图像API的不同。

torchvision.io.read_image

Pytorch处理图像的格式为Tensor,read_img函数读取图片时活得的格式便是如此,其各个维度为顺序为[‘C’, ‘H’, ‘W’],分别代表着通道数、图片高度以及宽度。

如果图片本身是黑白的,read_image读取的图片通道数C为1。除此之外,read_image读入的图像每个像素0-255整形。若希望处理范围到[0, 1]之间,则需要手动除以255,如下所示。

img = read_image(img_path) / 255.0

cv2.imread

PyTorch处理的图像也常使用OpenCV、PIL等库进行读取。其中,OpenCV读取的图像用numpy数组进行表示,各维度顺序为[‘H’, ‘W’, ‘C’]。如果采取这种方案读取数据,需要将numpy转换为tensor,同时还要将维度的顺序改变。

Pytorch中最常用的方法是使用torchvision.transforms中的ToTensor,这个操作会将一个取值范围在[0,255]的numpy.ndarray图像转换为[0,1.0]的torch.FloadTensor图像,同时各维度的顺序也将自动调整。

与上一节read_image不同,cv2.imread遇到一个黑白图片时,会自动复制成3个通道,除非在传入的参数中指定该图像是一张灰度图(flags设置为cv2.IMREAD_GRAYSCALE),更简单的写法如下:

img = cv2.imread(img_path, 0)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值