OpenCV for Python 学习第四天 :通道的获取与合并

上一篇博客,我们学习了如何通过更快的item()和itemset()的方法访问图片,以及了解了图像的兴趣位置的获取方法,那么今天,我们将学习通道的处理方法,通过通道的拆分和合并的实例,让大家更好的了解咱们有关于BGR通道的知识。

文章大纲

通道获取

Split() 方法

在OpenCV中,可以使用split()方法将图像的不同通道拆分为单独的Mat对象。该方法接收一个原始图像的Mat对象并返回一个包含所有通道的向量,每个通道都保存为单独的Mat对象。以下是通道拆分的示例代码:

python 复制代码
import cv2

# 读取图像
img = cv2.imread("LFS.jpg")

# 将图像的不同通道拆分为单独的Mat对象
B, G, R = cv2.split(img)

# 显示单个通道的图像
cv2.imshow("Blue Channel", B)
cv2.imshow("Green Channel", G)
cv2.imshow("Red Channel", R)

cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先读取一张图像,然后使用split()方法将其拆分为Blue、Green和Red通道,并将每个通道分别保存为单独的Mat对象。接下来,我们显示每个通道的图像并等待用户按下任意按键以关闭窗口。

索引法

还有一个更加原始的方法就是像我们之前处理图片所用的索引法一样,来进行各个通道之间的分离。

python 复制代码
import cv2

# 读取图像
img = cv2.imread("COLOR_LFS.jpg")

# 索引分离
B = img[:,:,0]
G = img[:,:,1]
R = img[:,:,2]

# 显示单个通道的图像
cv2.imshow("Blue Channel", B)
cv2.imshow("Green Channel", G)
cv2.imshow("Red Channel", R)

cv2.waitKey(0)
cv2.destroyAllWindows()

显示出来的结果和之前一样,都是分离了三个的界面哦~

更改通道

通道修改可用于根据不同通道之间的差异来分割图像或提取感兴趣的对象。例如,可以通过比较红色通道和绿色通道的差异来分割红色物体,或者通过计算梯度来提取边缘信息。

我们上手进行尝试。

我们仍然使用索引法,将绿色通道的数据复制到蓝色通道上去。

python 复制代码
import cv2

# 读取图像
img = cv2.imread("COLOR_LFS.jpg")
cv2.imshow("Origin Image", img)

# 索引变换 蓝色通道改成绿色通道
img[:,:,0] = img[:,:,1]

# 显示通道的图像
cv2.imshow("Change Image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

我们可以看到,原本蓝色的天变成了绿色的天。

通道合并

merge() 函数

在OpenCV中,可以使用merge()方法将多个Mat对象合并为一个多通道的Mat对象。该方法接受一个包含多个单通道Mat对象的向量,并返回一个多通道的Mat对象。以下是merge()方法的示例代码:

python 复制代码
import cv2

# 读取图像
img = cv2.imread("COLOR_LFS.jpg")

# 将图像的不同通道拆分为单独的Mat对象
B, G, R = cv2.split(img)

# 合并单个通道的图像为多通道的图像
merged_img = cv2.merge([B, G, R])

# 显示合并后的图像
cv2.imshow("Merged Image", merged_img)
print(merged_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先读取一张图像,然后使用split()方法将其拆分为Blue、Green和Red通道,并将每个通道分别保存为单独的Mat对象。接下来,我们使用merge()方法将这三个单通道的Mat对象合并为一个多通道的Mat对象。最后,我们显示合并后的图像并等待用户按下任意按键以关闭窗口。

那么以上是正常的组合,那加入我们用错误的组合方式会怎么样呢?

python 复制代码
import cv2

# 读取图像
img = cv2.imread("COLOR_LFS.jpg")

# 将图像的不同通道拆分为单独的Mat对象
B, G, R = cv2.split(img)

# 合并单个通道的图像为多通道的图像
correct_img = cv2.merge([B, G, R])
wrong_img_1 = cv2.merge([G,B,R])
wrong_img_2 = cv2.merge([R,G,B])

# 显示合并后的图像
cv2.imshow("CORRECT Image", correct_img)
cv2.imshow("WRONG Image 1", wrong_img_1)
cv2.imshow("WRONG Image 2", wrong_img_2)

cv2.waitKey(0)
cv2.destroyAllWindows()

我们可以很明显地看到,图片的颜色发生了变化

每日总结

今天我们学习了使用split()方法分离每一个通道,以及索引的[:,:,num]的方法分离。我们还学习了融合通道的merge[a,b,c]的方法。那么我们下一篇文章再见~

相关推荐
华研前沿标杆游学11 分钟前
2026年企业对标学习TOP7项目:小米数字化考察上榜
python
大模型码小白1 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring
BerryS3N1 小时前
深度解析:从零构建生产级大模型 RAG(检索增强生成)系统全栈指南
开发语言·python·ai
weixin_BYSJ19871 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
今儿敲了吗2 小时前
Python——函数基础
开发语言·笔记·python
泰勒朗斯2 小时前
Helicopter FBI-405尾电机版本设置
学习
半条_虫2 小时前
豆包-网页逆向接口, 免token调用AI
python·ai·shell
kels88992 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
爱吃程序猿的喵2 小时前
LingBot-Map 复现与原理剖析:基于 Geometric Context Transformer 的流式 3D 重建
人工智能·python·深度学习·计算机视觉·3d·transformer
梦想不只是梦与想2 小时前
Python 中的 match-case(模式匹配)
python·match-case