《用python的话,一定要试着使用的函数》第九集。(CHW转HWC或任意格式,rgb转gbr或任意格式)

《用python的话,一定要试着使用的函数》专栏的第九集。这集是关于python的图像处理中的常用的格式转换。
这个专栏会确保短小精悍,学得快,看了不后悔。

用python的话,一定要试着使用的函数

第九集的主角是numpy里面的transpose 及img[:,:,::-1],img[:,:,[x,y,z]],cv2.cvtColor。附带会提一下img[::-1,:,:]、img[:,::-1,:]。

这有什么用?

transpose可以先把CHW/HWC等任意格式 转成HWC/CHW等任意格式

img[:,:,::-1],img[:,:,[x,y,z]],cv2.cvtColor这三个可以把rgb等任意格式转成gbr等任意格式

怎么装?

pip install numpy

怎么用?

先举例transpose吧

import numpy as np

c=3
h=360
w=640
a=np.ones([c,h,w])
print(a.shape)
b=a.transpose(1, 2, 0)
print(b.shape)

结果是

(3, 360, 640)
(360, 640, 3)

如图
在这里插入图片描述
可以理解为,c的原本位置是0,h的原本位置是1,w的原本位置是2。
transpose(1, 2, 0)则理解为把原先1位置上的h放到第一,原先2位置上的w放到第二,原先0位置上的h放到第三。

接着举例img[:,:,::-1],img[:,:,[x,y,z]],cv2.cvtColor这三个

img[:,:,::-1]是指如果原先是rgb,那么倒着排一下就是bgr。
cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB),这个很好理解了,直接就是BGR2RGB。
而img[:,:,[x,y,z]],其中需要将0,1,2三个数根据需要分给x,y,z,和transpose的理解方式一样。
如果不清楚可以运行下面的代码。包你清楚明白。

import numpy as np
import cv2
# 西瓜6写的(转载/爬虫)记得声明
c=3
h=360
w=640
img_bgr=np.ones([h,w,c])
# 西瓜6写的(转载/爬虫)记得声明
b,g,r=cv2.split(img_bgr)
g=2*g
r=3*r
img_bgr=cv2.merge((b,g,r))
#模拟三通道图片img_bgr,b里全为1,g里全为2,r里全为3。
#方法一:img[:,:,::-1]
img_rgb=img_bgr[:,:,::-1]
#方法二:img[:,:,[x,y,z]]
img_021=img_bgr[:,:,[0,2,1]]
img_120=img_bgr[:,:,[1,2,0]]
img_102=img_bgr[:,:,[1,0,2]]
img_201=img_bgr[:,:,[2,0,1]]
img_210=img_bgr[:,:,[2,1,0]]
#方法三 cv2.cvtColor
img_bgr=img_bgr.astype("uint8") #不进行这一步可能会报错
img_cv_rgb=cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

结果如图,模拟了一个三通道图片数据img_bgr,b里全为1,g里全为2,r里全为3。
因此,你也可以看作img_bgr[:,:,::-1]等同于cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)等同于img_bgr[:,:,[2,1,0]]。
在这里插入图片描述
注:稍微给新手提醒的一点就是cv2.cvtColor可能会要求输入的数据类型。

附带说一下img[::-1,:,:]、img[:,::-1,:]

img[::-1,:,:] ,如果数据是[h,w,c],则是竖直翻转。
img[:,::-1,:],如果数据是[h,w,c],则是水平翻转。
理解思路同img[:,:,::-1]。

结束语

嘿嘿,很好用的,有帮助就点个赞和关注咯。感谢各位。
西瓜6的啦啦啦

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值