opencv-python的RGB与BGR互转方式


Posted in Python onJune 02, 2020

一、格式转换

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

以上这篇opencv-python的RGB与BGR互转方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
利用python循环创建多个文件的方法
Oct 25 Python
python监测当前联网状态并连接的实例
Dec 18 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 #Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 #Python
基于pycharm实现批量修改变量名
Jun 02 #Python
pytorch读取图像数据转成opencv格式实例
Jun 02 #Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 #Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 #Python
Pandas读取csv时如何设置列名
Jun 02 #Python
You might like
php echo 输出字符串函数详解
2010/05/13 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
Node.js文件操作详解
2014/08/16 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python中的sort方法使用详解
2014/07/25 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
Python实现多线程的两种方式分析
2018/08/29 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
大学生简单自荐信
2013/11/10 职场文书
小学信息技术教学反思
2014/02/10 职场文书
超市国庆节促销方案
2014/02/20 职场文书
淘宝活动总结范文
2014/06/26 职场文书
就业推荐表导师评语
2014/12/31 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python