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使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python中使用dom模块生成XML文件示例
Apr 05 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Python实现股市信息下载的方法
Jun 15 Python
Python字符串对象实现原理详解
Jul 01 Python
ipad上运行python的方法步骤
Oct 12 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP curl使用实例
2015/07/02 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
关于react-router的几种配置方式详解
2017/07/24 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
Python扩展内置类型详解
2018/03/26 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
Born鞋子官网:Born Shoes
2017/04/06 全球购物
EJB的角色和三个对象
2015/12/31 面试题
自荐信范文
2013/12/10 职场文书
计算机求职信
2014/07/02 职场文书
超市督导岗位职责
2015/04/10 职场文书