酷站(www.ku0.com)-致力于为互联网从业者提供动力!

热门关键词:  企业  as  baidu  c4rp3nt3r  美女
【ECS精选特惠】新用户上云低至1折起
百度资源

opencv-python的RGB与BGR互转方式的详解

来源:互联网搜集 作者:秩名 人气: 发布时间:2020-06-02
本篇文章主要介绍了opencv-python的RGB与BGR互转方式的详解,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

一、格式转换

opencv读取图片的默认像素排列是BGR,需要转换。PIL库是RGB格式。

caffe底层的图像处理是基于opencv,其使用的颜色通道顺序与也是BGR(Blue-Green-Red),而日常图片存储时颜色通道顺序是RGB。

在Python中,将RGB顺序的图像转成BGR顺序,需要调整channel dimension的各颜色通道顺序。

方法1:

img = cv2.imread("001.jpg")

img_ = img[:,:,::-1].transpose((2,0,1))

① 在opencv里,图格式HWC,其余都是CHW,故transpose((2,0,1))

② img[:,:,::-1]对应H、W、C,彩图是3通道,即C是3层。opencv里对应BGR,故通过C通道的 ::-1 就是把BGR转为RGB

注: [::-1] 代表顺序相反操作

③ 若不涉及C通道的BGR转RGB,如Img[:,:,0]代表B通道,也就是蓝色分量图像;Img[:,:,1]代表G通道,也就是绿色分量图像;Img[:,:,2]代表R通道,也就是红色分量图像。

方法2:

使用opencv自带函数转换图像的R通道和B通道。

RGB -> BGR

img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)

BGR->RGB

img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

方法3:

BRG转RGB

rgb = bgr[...,::-1]

RGB转BGR

bgr = rgb[...,::-1]

RGB转GBR

gbr = rgb[...,[2,0,1]]

二、其他

添加Batch项一般是caffe2图像预处理的最后一步,在经过RGB->BGR,图像增强以及HWC->CHW后,还需要在CHW前添加一个第四维N以记录图像样本数量(即batchsize),所以输入caffe的图像格式为(N,C,H,W),其中颜色通道C的顺序是BGR。

但是对于TensorFlow这个顺序有差别。TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels];设置为 “NCHW” 时,排列顺序为 [batch, channels, height, width]。

两种数据格式的转换:

NHWC –> NCHW:

 
import tensorflow as tf
x = tf.reshape(tf.range(24), [1, 3, 4, 2])
out = tf.transpose(x, [0, 3, 1, 2])
 

NCHW –> NHWC:

 
import tensorflow as tf
x = tf.reshape(tf.range(24), [1, 2, 3, 4])
out = tf.transpose(x, [0, 2, 3, 1])
 

补充知识:浅谈opencv使用BGR而非RGB的原因

使用opencv读取图片时, 默认的通道顺序是BGR而非RGB,在RGB为主流的当下, 这种默认给我们带来了一点不便。那么, opencv 为什么要使用BGR而非RGB呢?

目前看到的一种解释说是因为历史原因:早期BGR也比较流行,opencv一开始选择了BGR,到后来即使RGB成为主流,但也不好改了。

(这个观点未经考证,也没有严肃考证的动力, 在“碰到”新的不同解释前, 估且就这么认为吧)

References

https://stackoverflow.com/questions/14556545/why-opencv-using-bgr-colour-space-instead-of-rgb

版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:https://blog.csdn.net/qq_27871973/article/details/96724270

相关文章

  • Python实现壁纸下载与轮换的教程

    Python实现壁纸下载与轮换的教程

    准备 下载安装Python3 官网下载即可,选择合适的版本:https://www.python.org/downloads/ 安装一直下一步即可,记得勾选添加到环境变量。 安装pypiwin32 执行设置壁纸操作需要调用Windows系统的API,需要安装pypiwin32,控制台执行如下......
    10-20
  • 教你如何快速自学python

    教你如何快速自学python

    一、作为初学者,应该如何学python? 很多人对python缩进试的简洁表达不以为然。那些都是已混迹于C和JAVA的老鸟已经习惯了花括号。对于初学者,python语言是最好写,最好读的。 二、追求生产力,应该学python python是全能语言,社区庞大......
    06-23
  • python的缩进规则的介绍

    python的缩进规则的介绍

    一般的语言都是通过{}或end来作为代码块的标记,而Python则是通过缩进来识别代码块的。 对于Python的这种缩进风格,喜欢它的人说这是一种乐趣;不喜欢它的人说这是一门需要卡尺的语言,因为需要使用游标卡尺去测量每行代码的缩进。 不管......
    06-23
  • python可以用哪些数据库?

    python可以用哪些数据库?

    数据库分类 早期数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。 而在当今的互联网中,通常把数据库分为两类,即关系型数据库和非关系型数据库。 关系型数据库 关系型数据库是指采用了关系模型来组织数据的数据库,......
    06-23
  • Django Admin上传文件到七牛云的教程

    Django Admin上传文件到七牛云的教程

    中文圈关于Django Admin 上传文件到七牛云的资料和函数库已经是2年前的了,国外的则都是关于AWS S3、Azure Storage一些国外的服务的。我根据Django的文档里提到的存储系统来实现上传文件到七牛云的简单功能。 在Django Admin的表单是根据......
    06-20
  • python中什么是面向对象?

    python中什么是面向对象?

    用面向对象的思维解决问题的重点 当遇到一个需求的时候不用自己去实现,如果自己一步步实现那就是面向过程;应该找一个专门做这个事的人来做。 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我们可以把它定义为: 按人们 认......
    06-11
  • python实现凯撒密码、凯撒加解密算法的介绍

    python实现凯撒密码、凯撒加解密算法的介绍

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message):# *************begin************# message1=message.upper() #把明文字母变成大写 message......
    06-11
  • pyinstaller打包运行程序时出现缺少plotly库问题的介绍

    pyinstaller打包运行程序时出现缺少plotly库问题的介绍

    用pyinstaller打包tkinter程序,打包后运行exe是报如下错误: 搜索一阵发现是pyinstaller在打包的时候(StartRun.py我要打包的主程序文件)可能会漏掉一些三方库,就在打包的时候加上三方库的绝对路径: pyinstaller StartRun.py -F -p C:\......
    06-02
  • opencv-python的RGB与BGR互转方式的详解

    opencv-python的RGB与BGR互转方式的详解

    一、格式转换 opencv读取图片的默认像素排列是BGR,需要转换。PIL库是RGB格式。 caffe底层的图像处理是基于opencv,其使用的颜色通道顺序与也是BGR(Blue-Green-Red),而日常图片存储时颜色通道顺序是RGB。 在Python中,将RGB顺序的图像转......
    06-02
  • Python进行闭包时绑定变量操作的介绍

    Python进行闭包时绑定变量操作的介绍

    搞不清楚在闭包(closures)中Python是怎样绑定变量的 看这个例子: def create_multipliers():... return [lambda x : i * x for i in range(5)] for multiplier in create_multipliers():... print multiplier(2)... 期望得到下面的输......
    05-29

最新更新