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]的方法。那么我们下一篇文章再见~

相关推荐
喵手2 小时前
Python爬虫实战:针对Python官网,精准提取出每一个历史版本的版本号、发布日期以及对应的文档/详情页链接等信息,并最终清洗为标准化的CSV文件!
爬虫·python·爬虫实战·零基础python爬虫教学·python官方数据采集·采集历史版本版本号等信息·导出csv文件
EnglishJun2 小时前
Linux系统编程(二)---学习Linux系统函数
linux·运维·学习
im_AMBER2 小时前
Leetcode 115 分割链表 | 随机链表的复制
数据结构·学习·算法·leetcode
databook2 小时前
像搭积木一样思考:数据科学中的“自下而上”之道
python·数据挖掘·数据分析
luoluoal2 小时前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
啊阿狸不会拉杆3 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
喵手3 小时前
Python爬虫实战:城市停车收费标准自动化采集系统 - 让停车费透明化的技术实践(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·城市停车收费标准·采集城市停车收费数据·采集停车数据csv文件导出
无水先生3 小时前
python函数的参数管理(01)*args和**kwargs
开发语言·python
py小王子3 小时前
dy评论数据爬取实战:基于DrissionPage的自动化采集方案
大数据·开发语言·python·毕业设计
Pyeako3 小时前
opencv计算机视觉--LBPH&EigenFace&FisherFace人脸识别
人工智能·python·opencv·计算机视觉·lbph·eigenface·fisherface