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用10行代码实现对黄色图片的检测功能
Aug 10 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Python实现按中文排序的方法示例
Apr 25 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
python游戏开发的五个案例分享
Mar 09 Python
如何在python中判断变量的类型
Jul 29 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
python 实现有道翻译功能
Feb 26 Python
python中取整数的几种方法
Nov 07 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
WINXP下apache+php4+mysql
2006/11/25 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
浅析使用Python操作文件
2017/07/31 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python使用zip将list转为json的方法
2018/12/31 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
Python中turtle库的使用实例
2019/09/09 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Django视图、传参和forms验证操作
2020/07/15 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
企业管理毕业生求职信
2014/03/11 职场文书
小学生暑假家长评语
2014/04/17 职场文书
责任书范本
2014/08/25 职场文书
专业见习报告范文
2014/11/03 职场文书
军训通讯稿范文
2015/07/18 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技