《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.4.3 使用图像通道

举报
华章计算机 发表于 2020/02/15 15:38:04 2020/02/15
【摘要】 本节书摘来自华章计算机《计算机视觉算法:基于OpenCV的计算机应用开发》 一书中第3章,第3.4.3节,作者是[伊朗] 阿明·艾哈迈迪·塔兹赫孔迪(Amin Ahmadi Tazehkandi) ,陈靖 杨欣 译。

3.4.3 使用图像通道

OpenCV提供了一些处理通道的函数,方便我们对通道进行合并、拆分或各种操作。在本节中,我们将学习如何将图像分割为独立的通道或使用多个单通道图像来生成多通道图像。那么,让我们开始吧。

你可以使用merge函数合并多个单通道Mat对象,并创建一个新的多通道Mat对象,如下例所示:

 image.png

在前面的代码中,ch1、ch2和ch3都是相同大小的单通道图像。结果将生成一个三通道Mat对象。

你还可以使用insertChannel函数将新通道插入图像。就是这样:

 image.png

在前面的代码中,ch是单通道Mat对象,image是我们想要在其中插入额外通道的矩阵,而idx指的是将插入通道的位置索引,索引号从零开始。

split函数可用于执行与merge函数完全相反的功能,即分割多通道图像以创建多个单通道图像。如下例所示:

 image.png

前面代码中的通道数组将包含三个相同大小的单通道图像,这些图像对应于图像中的每个单独通道。

你可以使用extractChannel函数从图像中提取单个通道:

 image.png

很明显,在前面的代码中,位置索引为idx的通道将从图像中提取并保存在ch中。

尽管merge、split、insertChannel和extractChannel函数对于大多数用例来说已经足够了,你可能仍然需要对图像中的通道进行更复杂的重排、提取或其他操作。因此,OpenCV提供了一个名为mixChannels的函数,它提供了更高级的处理通道的方法。为了完成这个任务,我们可以使用以下示例代码:

 image.png

前面示例中最重要的是fromTo向量,它包含了源和目标中对应的通道号。这些通道索引也是从0开始的,因此“0,1”表示源图像中的第1个通道将被复制到结果中的第2个通道,依此类推。

值得注意的是,本节前面提到的函数(合并、拆分等)都是mixChannels函数的一部分情况。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。