OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道
☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░
一、引言
在OpenCV中,图像装载后以矩阵保存,对于灰度图矩阵为二维矩阵,对于彩色图像则为三维矩阵。彩色图像又分为BGR格式和BGRA格式,BGR格式对于像素的蓝、绿、红三个通道,BGRA格式蓝、绿、红三个颜色通道加一个代表透明度的阿尔法通道。有时出于处理需要,需要针对图像矩阵的单个通道进行处理,这时就需要进行图像单通道数据的访问。
二、使用split拆分图像通道
OpenCV提供了专门的通道拆分的函数split,调用语法如下:
split(img, mv=None)
其中的参数为输入图像矩阵,mv是可选的拆分后结果,一般不需要,因为该函数返回的就是拆分的结果。
返回值为一个列表对象,对象的元素个数为输入图像的通道数,每个元素为一个二维矩阵,内容为每个通道的数据。如BGRA格式的图像,则返回4个元素,每个元素分别对应B、G、R、A四个通道的数据。
示例代码:
>>> import cv2
>>> img = cv2.imread(r'f:\pic\ring.png',cv2.IMREAD_UNCHANGED)
>>> img.shape
(742, 1156, 4)
>>> ret = cv2.split(img)
>>> len(ret)
4
>>> B,G,R,A = ret
>>> B
array([[28, 28, 28, ..., 29, 29, 29],[28, 28, 28, ..., 29, 29, 29],[28, 28, 28, ..., 29, 29, 29],...,[35, 35, 35, ..., 35, 35, 35],[35, 35, 35, ..., 35, 35, 35],[35, 35, 35, ..., 35, 35, 35]], dtype=uint8)
>>> B.shape
(742, 1156)
拆分的通道可以通过merge将其合并成一个图像矩阵,例如对上面拆分的4个通道的BGR通道进行合并,可以执行如下代码:
>>> imgBGR = cv2.merge((B,G,R))
>>> imgBGR.shape
(742, 1156, 3)
三、使用矩阵进行通道数据访问
由于图像在OpenCV中为矩阵,就可以直接使用numpy的矩阵索引来进行矩阵数据的访问。例如要针对输入图像img分别获取BGR通道的数据,可以执行如下代码:
imgBlueC0 = img[:,:,0]imgBlueC1 = img[:, :, 1]imgBlueC2 = img[:, :, 2]
四、关于通道拆分的建议
- 通道拆分和合并操作对应图像来说处理开销比较大,建议仅在必要时才进行
- 对于通道拆分,numpy矩阵索引性能要优于OpenCV,图像越大,numpy矩阵索引性能越优
五、一个通道拆分对比的例子
针对如下图像(文件名:手握蓝球.JPG):
我们使用两种通道拆分方式分别拆分,然后对比一下拆分结果:
import cv2
import numpy as npfrom opencvPublic import preparePreviewImg,previewImgList,previewImg,cmpMatrix,readImgFiledef main():imgFName = r'f:\pic\手握蓝球.JPG'img = readImgFile(imgFName, False) #自定义读入图片文件的函数,readImgFile(filename,bConvertGray=False,bConvertBinImg=False,bConvertKernal = False)imgBlue,imgGreen,imgRed = cv2.split(img)imgBlueAnd = cv2.bitwise_and(img,255)imgBlueC0 = img[:,:,0]imgBlueC1 = img[:, :, 1]imgBlueC2 = img[:, :, 2]preparePreviewImg(img, imgFName + ': 原图')preparePreviewImg(imgBlue, '原图split后B通道')preparePreviewImg(imgGreen, '原图split后G通道')preparePreviewImg(imgRed, '原图split后R通道')preparePreviewImg(imgBlueAnd, 'imgBlueAnd')preparePreviewImg(imgBlueC0, '原图0号通道(B通道)')preparePreviewImg(imgBlueC1, '原图1号通道(G通道)')preparePreviewImg(imgBlueC2, '原图2号通道(R通道)')retB = cmpMatrix(imgBlue, imgBlueC0)retG = cmpMatrix(imgGreen, imgBlueC1)retR = cmpMatrix(imgRed, imgBlueC2)print(f"split拆分图像3通道与图像矩阵数字3通道访问图像比对结果如下:{(retB,retG,retR)}")previewImgList()cv2.waitKey(5000)main()
上述代码中从opencvPublic模块导入的函数请参考《https://blog.csdn.net/LaoYuanPython/article/details/111351901:OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》的介绍。
执行程序后,运行后显示的图像如下:
系统输出的文本信息如下:
split拆分图像3通道与图像矩阵数字3通道访问图像比对结果如下:(True, True, True)
从以上结果可以看到,两种拆分方式的通道数据完全相同。另外由于拆分后的通道数据被作为灰度图像对待,因此显示的图像为灰度图。上图中imgBlueAnd 对应图像为彩色图像位于255标量后的结果图像,因为值保留了蓝色通道的值,其他通道的值被置为0,因此显示为整体蓝色的图像。
六、小结
本文介绍了OpenCV图像通道拆分的两种方式,可以看到,OpenCV的split函数和numpy的矩阵索引两种拆分方式得到的结果数据是相同的,但numpy矩阵索引方式性能更好。因此图像通道的拆分非必要不执行,如果要执行,尽量采用numpy矩阵操作。
写博不易,敬请支持:
昨天到今天休假两天,既要处理家里事情,又要处理单位事情,还要写测试代码和博文。写博不易,敬请支持!
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:https://blog.csdn.net/laoyuanpython/category_9979286.html
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
跟老猿学Python、学OpenCV!
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░
OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道相关推荐
- 使用OpenCV+Python进行图像处理的初学者指南
介绍 我们都知道一句话:"每张照片都可以告诉我们一个故事".图像中可能隐藏着很多信息,我们可以用不同的方式和视角来解释它.那么,什么是图像,如何处理图像? 简而言之,我们可以说图像 ...
- python图像处理教程,【图像处理】使用OpenCV+Python进行图像处理入门教程(二)...
这篇随笔介绍使用OpenCV进行图像处理的第二章 图像的运算,让我们踏上继续回顾OpenCV进行图像处理的奇妙之旅,不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 2 图像的运算 复杂的 ...
- OpenCV-Python图形图像处理专栏文章目录
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 注: 1.部分文章前面标星号表示文章为付费专栏文章 2.本专栏的伴生付费专栏<htt ...
- opencv python轻松入门_OpenCV轻松入门 面向Python
章OPENCV入门1 1.1如何使用1 1.2图像处理基本操作3 1.2.1读取图像3 1.2.2显示图像5 1.2.3保存图像9 1.3OpenCV贡献库10 第2章图像处理基础11 2.1图像的基 ...
- python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...
一.色彩空间的转换 代码如下: #色彩空间转换 import cv2 as cv def color_space_demo(img): gray = cv.cvtColor(img, cv.COLOR ...
- Python的图像处理库(OpenCV,PIL,matplotlib和scikit-image)
目前接触过的python图像处理代码涉及到多种的图像库,其中最常用的当属opencv和PIL.惭愧的是,以前只是拿来用,却一直迷惑为什么不同的代码会选择不同的图像库.这些图像库的联系和区别又是什么 ...
- python去除图片复杂背景_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (五)
部分 IV OpenCV 中的图像处理 22 直方图 22.1 直方图的计算,绘制与分析 目标 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotli ...
- 基于Opencv的数字图像处理技巧(python)
图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术.又称影像处理.图像处理一般指数字图像处理.数字图像是指用工业相机.摄像机.扫描仪等设备经过拍摄得到的一个大的 ...
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...
最新文章
- 2022-2028年中国阻燃母料行业市场深度分析及发展规模预测报告
- YOLOv5目标检测源码重磅发布了!
- java httpclient 为邮箱添加来信转发规则
- 异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...
- mysql按年创建分区表,增加分区表,删除分区表,实战练习
- velocity 教程
- 1 CentOS下磁盘LVM扩容
- javascript 弹出层(警告框)的制作(css元素居中、javascript元素居中)
- Firefox扩展插件开发extension代码调试方法
- 共轭梯度法Matlab的实现
- Iocomp Crack和ProEssentials Crack
- 基于一维卷积神经网络模型的AI量化智能选股策略
- leetcode:买卖股票的最佳时机含手续费(python)
- Teemo Attacking
- J8583CN解析ISO8583协议报文注意点
- EPLAN界面编辑背景颜色更改
- SCOI-2017 游记 SCOI-2017 酱油记 SCOI-2017 没有滚粗资格的记
- 锐捷端口安全实验配置
- win7系统笔记本作为wifi热点提供无线连接
- Cad2008 注册证书问题办法
热门文章
- 华为云CCE学习笔记-部署harbor(helm模板)
- 通过AI工具(ChatGPT接口)生成一字未改的论文,查重率4.2%,可以直接当作论文使用
- Web前端html5+css3前端开发入门学习笔记
- 计算机软件著作权法保护的内容不包括,计算机著作权保护法中的软件著作权包括哪些权限...
- Inspection info: This inspection analyzes method control and data flow to report possible conditions
- 有道云笔记4年的用户体验
- storm滑动时间窗口实现
- Linux 查找内容包含某字段的文件
- php监听iframe加载完成,window_IE iframe的onload方法分析小结,判断iframe是否加载完成的完美 - phpStudy...
- 当代世界顶级彩铅牛人的画作,每一副仿佛照片一样逼真!