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

相关推荐
cylat几秒前
Day59 经典时序预测模型3
人工智能·python·深度学习·神经网络
嘉恩督5 分钟前
视频人脸处理——人脸面部动作提取
python·音视频
WJ.Polar6 分钟前
Python数据容器-集合set
开发语言·python
smppbzyc28 分钟前
2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文讲解(含完整python代码)
python·数学建模·数据分析·数学建模竞赛·亚太杯数学建模·亚太杯
xiaocainiao88140 分钟前
Python 实战:构建可扩展的命令行插件引擎
开发语言·python
kyle~1 小时前
Opencv---深度学习开发
人工智能·深度学习·opencv·计算机视觉·机器人
运器1232 小时前
【一起来学AI大模型】PyTorch DataLoader 实战指南
大数据·人工智能·pytorch·python·深度学习·ai·ai编程
音元系统2 小时前
Copilot 在 VS Code 中的免费替代方案
python·github·copilot
超龄超能程序猿2 小时前
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
人工智能·python·机器学习·numpy·pandas·scipy
Wy. Lsy2 小时前
Kotlin基础学习记录
开发语言·学习·kotlin