经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 |
在图像颜色模型中不同的分量存放在不同的通道中,如果我们只需要颜色模型的某一个分量,例如只需要处理RGB图像中的红色通道,可以将红色通道从三通道的数据中分离出来再进行处理,这种方式可以减少数据所占据的内存,加快程序的运行速度。同时,当我们分别处理完多个通道后,需要将所有通道合并在一起重新生成RGB图像。针对图像多通道的分离与混合,OpenCV 4中提供了split()函数和merge()函数用于解决这些需求。
多通道分离函数split()
OpenCV 4中针对多通道分离函数split()有两种重载原型,在代码清单3-4中给出了这两种函数原型。
代码清单3-4 split()函数原型
1. void cv::split(const Mat & src,
2. Mat * mvbegin
3. )
4.
5. void cv::split(InputArray m,
6. OutputArrayOfArrays mv
7. )
- src:待分离的多通道图像。
- mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同
- m:待分离的多通道图像
- mv:分离后的单通道图像,为向量vector形式
该函数主要是用于将多通道的图像分离成若干单通道的图像,两个函数原型中不同之处在于前者第二个参数输入的是Mat类型的数组,其数组的长度需要与多通道图像的通道数相等并且提前定义;第二种函数原型的第二个参数输入的是一个vector容器,不需要知道多通道图像的通道数。两个函数原型虽然输入参数的类型不同,但是通道分离的原理是相同的,可以用公式(3.4)表示。
m v [ c ] ( I ) = s r c ( I ) c (3.4) mv\left[ c \right](I) = src{(I)_c} \tag{3.4} mv[c](I)=sr