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实现的检测网站挂马程序
Nov 30 Python
Python中类型检查的详细介绍
Feb 13 Python
python中OrderedDict的使用方法详解
May 05 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
Jul 04 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
python:按行读入,排序然后输出的方法
Jul 20 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Django 批量插入数据的实现方法
Jan 12 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
python和anaconda的区别
May 06 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 数组实例说明
2008/08/18 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
python设置表格边框的具体方法
2020/07/17 Python
Python如何批量生成和调用变量
2020/11/21 Python
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
档案信息化建设方案
2014/05/16 职场文书