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对象及面向对象技术详解
Jul 19 Python
python 链接和操作 memcache方法
Mar 04 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
python3实现单目标粒子群算法
Nov 14 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
python实现学生信息管理系统(精简版)
Nov 27 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获取随机数字和字母的方法详解
2013/06/06 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
业务代表的岗位职责
2013/11/16 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
活动总结新闻稿
2014/08/30 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python