pytorch读取图像数据转成opencv格式方法

pytorch读取图像数据转成opencv格式方法:先转成numpy通用的格式,再将其转换成opencv格式。

pytorch读取的数据使用loaddata这类函数实现。pytorch网络输入图像的格式为(C, H, W),就是(通道数,高,宽)而numpy中图像的格式为(H,W,C)。那就将其通道调换一下。用到函数transpose。转换方法如下

例如A 的格式为(c,h,w) 那么经过

A = A.transpose(1,2,0)

后就变成了(h,w,c)了

然后用语句

B= cv2.cvtColor(A,cv2.COLOR_RGB2BGR)

结果就变成opencv可用的图像了。 如果不做transpose转换,那么得到的图像是一个1*h大小的图.......

 

完整代码:

变换部分:

一般的pytorch会进行裁剪 放缩 归一化等操作。例如

transforms = Compose([
            ToTensor(),//将数据除以255加载进来
            Resize(768),//裁剪768*768大小的图像
            ConvertMaskID(Cityscapes.classes),//与这个事无关不用去管它
            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])// 归一化 利用均值方差归一化
        ])

那么被处理的数据就要反归一化回来呗 

代码如下:三通道的数据

            image_idx = x[idx].cuda().data.cpu().float().numpy() #经过上面处理的数据 在gpu上给取出来放在cpu上。是个numpy类型
            image_idx[0] = image_idx[0] * std[0] + mean[0]#三个通道分别进行反归一化...按公式来的
            image_idx[1] = image_idx[1] * std[1] + mean[1]
            image_idx[2] = image_idx[2] * std[2] + mean[2]
            
            image_idx[0][image_idx[0] > 1] = 1#对最大值最小值做次保护
            image_idx[0][image_idx[0] < 0] = 0
            
            image_idx[1][image_idx[1] > 1] = 1
            image_idx[1][image_idx[1] < 0] = 0
            
            image_idx[2][image_idx[2] > 1] = 1
            image_idx[2][image_idx[2] < 0] = 0
            
            image_idx = image_idx.transpose(1,2,0)

            img1 = cv2.cvtColor(image_idx * 255,cv2.COLOR_RGB2BGR)#转成opencv认识的玩意
            tpath1="dddd/"+"yy0" + str(100 * i + idx) + '.jpg'
            cv2.imwrite(tpath1, img1) 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值