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自动安装pip
Apr 24 Python
python八大排序算法速度实例对比
Dec 06 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
Jun 16 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
用python自动生成日历
Apr 24 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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/10/15 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
动手学习无线电
2021/03/10 无线电
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
利用python开发app实战的方法
2019/07/09 Python
python树的同构学习笔记
2019/09/14 Python
python getpass模块用法及实例详解
2019/10/07 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
房地产销售员的自我评价分享
2013/12/04 职场文书
技术总监岗位职责
2013/12/05 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
北京英文导游词
2015/02/12 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
CSS基础详解
2021/10/16 HTML / CSS
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
使用Ajax实现进度条的绘制
2022/04/07 Javascript
微信小程序调用python模型
2022/04/21 Python