pytorch中使用transforms.ToTensor()处理opencv获取的灰度图像问题

pytorch中使用transforms.ToTensor()处理opencv获取的灰度图像问题

众所周知,opencv读取的图片的格式为BGR即(height,width,channel),而PIL读取的图片恰恰相反,为(channel,height,width),matplotlib中也是如此。
在此插一句:如果要使用matplotlib显示opencv读取的图片,需要将opencv读取的图片进行transpose。即:img = cv2.imread(filepath),img = img.transpose(2,0,1),即改变矩阵中元素的位置,使用的是numpy中的转置操作。

Pytorch中使用torchvision.transforms.ToTensor()

我遇到的错误是,在服务器上使用opencv读取图片后,将图片处理为灰度图后,img的shape为[height,width],没有表示通道的维,然后使用ToTensor()操作时报错,即因为缺少维度而无法转置。在这里插入图片描述
然而在自己的电脑上进行同样的操作,能够成功。
在这里插入图片描述
此时,查看服务器和电脑上对torchvision.transforms的源代码,文件名为 functional. py,查看版本是否相同。
在这里插入图片描述
自己电脑上的版本中对此函数的书写
在这里插入图片描述
而服务器上的版本中没有if pic.ndim==2的判断。所以错误原因找到
如果遇到ToTensor报错,越界,则先查看源代码是否没有if判断。之后可以在源代码中修改,也可在自己的代码修改。增加if判断即可。

我自己的修改是在我的代码中。
在这里插入图片描述

解决方法

查看Anaconda3\Lib\site-packages\torchvision\transforms\functional.py文件中的ToTensor方法
是否如图所示
在这里插入图片描述
若没有,直接修改即可。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值