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

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

通道获取

Split() 方法

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

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对象。接下来,我们显示每个通道的图像并等待用户按下任意按键以关闭窗口。

索引法

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

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()

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

在这里插入图片描述

更改通道

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

我们上手进行尝试。

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

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()方法的示例代码:

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对象。最后,我们显示合并后的图像并等待用户按下任意按键以关闭窗口。

在这里插入图片描述
那么以上是正常的组合,那加入我们用错误的组合方式会怎么样呢?

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地摊主老袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值