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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
kNN算法python实现和简单数字识别的方法
Nov 18 Python
python中defaultdict的用法详解
Jun 07 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
详解Python基础random模块随机数的生成
Mar 23 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
python数据挖掘需要学的内容
Jun 23 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 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 $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
javascript中new关键字详解
2015/12/14 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Django实现学生管理系统
2019/02/26 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Python zip函数打包元素实例解析
2019/12/11 Python
Python如何发送与接收大型数组
2020/08/07 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
static函数与普通函数有什么区别
2015/12/25 面试题
毕业生自我推荐
2013/11/04 职场文书
公司保密承诺书
2014/03/27 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
水电工岗位职责
2015/02/14 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android