OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)

简介: OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

在BGR色彩空间中,图像的通道由B通道、G通道和B通道构成,下面将介绍OpenCV提供的方法拆分和合并通道

一、拆分通道

为了拆分图像中的通道 OpenCV提供了split方法

1:拆分一幅BGR图像中的通道

当使用split方法拆分一幅BGR图像中的通道时 语法如下

b,g,r=cv2.split(bgr_image)

参数说明bgr分别为BGR通道图像

bgr_image为一幅BGR图像

下面先拆分通道 然后再显示拆分后的通道图像

代码如下

import cv2
bgr_image = cv2.imread("5.1.jpg")
cv2.imshow("5.1", bgr_image) # 显示图5.1
b, g, r = cv2.split(bgr_image) # 拆分图5.1中的通道
cv2.imshow("B", b) # 显示图5.1中的B通道图像
cv2.imshow("G", g) # 显示图5.1中的G通道图像
cv2.imshow("R", r) # 显示图5.1中的R通道图像
cv2.waitKey()
cv2.destroyAllWindows()

但是为什么得到的是灰度图像呢,因为执行的imshow函数时原图像三个通道的值都会被修改为相同的,对于BGR图像而言,只要三个通道值相等,那么得到的就是灰度图像

2:拆分一幅HSV图像中的通道

语法如下

h,s,v=cv2.split(hsv_image)

下面先把图像从BGR色彩空间转换到HSV色彩空间,再进行拆分

效果如下

二、合并通道

合并通道是拆分通道的逆过程

1:合并BGR通道图像

使用merge方法 语法如下

bgr=cv2.merge([b,g,r])

bgr为合并通道后得到的图像

代码运行效果即呈现拆分前的原图像

import cv2
bgr_image = cv2.imread("5.1.jpg")
b, g, r = cv2.split(bgr_image) # 拆分图5.1中的通道
bgr = cv2.merge([b, g, r]) # 按B→G→R的顺序合并通道
cv2.imshow("BGR", bgr)
cv2.waitKey()
cv2.destroyAllWindows()

2:合并HSV通道图像

语法同上

首先将BGR色彩空间转换到HSV色彩空间,然后拆分得到的HSV图像中的通道,接着合并拆分后的通道图像,最后将合并通道后的图像从HSV色彩空间转换到BGR色彩空间

import cv2
bgr_image = cv2.imread("D:/5.1.jpg")
# 把图5.1从BGR色彩空间转换到HSV色彩空间
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv_image) # 拆分HSV图像中的通道
hsv = cv2.merge([h, s, v]) # 合并拆分后的通道图像
# 合并通道后的图像从HSV色彩空间转换到BGR色彩空间
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow("BGR", bgr) # 显示BGR图像
cv2.waitKey()
cv2.destroyAllWindows()

3:综合运用拆分通道和合并通道

在HSV色彩空间内,如果保持其中两个通道的值不变,调整第三个通道的值,会得到相应的艺术效果

SV通道值不变,把H通道值调整为180 然后合并拆分在转换空间效果如下

import cv2
bgr_image = cv2.imread("5.1.jpg")
cv2.imshow("5.1", bgr_image)
# 把图5.1从BGR色彩空间转换到HSV色彩空间
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv_image) # 拆分HSV图像中的通道
h[:, :] = 180 # 将H通道的值调整为180
hsv = cv2.merge([h, s, v]) # 合并拆分后的通道图像
# 合并通道后的图像从HSV色彩空间转换到BGR色彩空间
new_Image = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow("NEW",new_Image)
cv2.waitKey()
cv2.destroyAllWindows()

将HS通道值保持不变 把V通道值调整为255 效果如下

HV通道值保持不变 S通道值调整为255 效果如下

三、alpha通道

OpenCV在BGR色彩空间的基础上,又增加了一个用于设置图像透明度的A通道 即alpha通道,这样形成一个由BGR和A四个通道构成的色彩空间,A在0-255内取值,0表示透明,255表示不透明

下面我们把图像从BGR色彩空间转换到BGRA色彩空间,然后拆分通道,调整透明度,最后合并拆分后的图像并保存 效果如下

原图如下

透明度为172时如下

透明度为0时图像完全透明

代码如下

import cv2
bgr_image = cv2.imread("5.1.jpg")
# 把图5.1从BGR色彩空间转换到BGRA色彩空间
bgra_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2BGRA)
cv2.imshow("BGRA", bgr_image) # 显示BGRA图像
b, g, r, a = cv2.slit(bgra_image) # 拆分BGRA图像中的通道
a[:, :] = 172 # 将BGRA图像的透明度调整为172(半透明)
bgra_172 = cv2.merge([b, g, r, a]) # 合并拆分后并将透明度调整为172的通道图像
a[:, :] = 0 # 将BG图像的透明度调整为0(透明)
bgra_0 = cv2.merge([b, g, r, a]) # 合并拆分后并将透明度调整为0的通道图像
cv2.imwrite(r"C:\Deop\bgra_iamge.png",bgra_image)
cv2.imwrite(r"C:p\bgra_172.png",bgra_172)
cv2.imwrite(r"C:\Use
s\Administrator\Desktop\bgra_0.png",bgra_0)
cv2.imshow("A = 172", bgra_172) # 显示透明度为172的BGRA图像
cv2.imshow("A = 0", bgra_0) # 显示透明度为0的BGRA图像
cv2.waitKey()
cv2.destroyAllWindows()

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
26天前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
101 3
|
26天前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
327 2
|
26天前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
13天前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
211 0
|
11天前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
13天前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
19天前
|
开发工具 Android开发 开发者
用Flet打造跨平台文本编辑器:从零到一的Python实战指南
本文介绍如何使用Flet框架开发一个跨平台、自动保存的文本编辑器,代码不足200行,兼具现代化UI与高效开发体验。
150 0
|
21天前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
110 0
|
28天前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
91 0
|
存储 缓存 NoSQL
实战|教你用Python玩转Redis
之前辰哥已经给大家教了Python如何去连接Mysql(实战|教你用Python玩转Mysql),并进行相应操作(插、查、改、删)。除了Mysql外,Python最常搭配的数据库还有Redis。 那么今天辰哥就来给大家讲解一下Python如何使用Redis,并进行相关的实战操作。
591 0

推荐镜像

更多