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获取指定路径下所有指定后缀文件的方法
May 26 Python
python安装Scrapy图文教程
Aug 14 Python
python使用xslt提取网页数据的方法
Feb 23 Python
python实现定时发送qq消息
Jan 18 Python
python lxml中etree的简单应用
May 10 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
python SOCKET编程基础入门
Feb 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
Python常见数据结构详解
2014/07/24 Python
深入浅析python with语句简介
2018/04/11 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python闭包思想与用法浅析
2018/12/27 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
pytorch实现线性拟合方式
2020/01/15 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python如何给函数库增加日志功能
2020/08/04 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
出国留学经济担保书
2014/04/01 职场文书
地球一小时倡议书
2014/04/15 职场文书
单位租车协议书
2015/01/29 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技