欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

06_OpenCv通道分离与合并

程序员文章站 2022-05-16 14:54:16
...

06_OpenCv通道分离与合并

一.通道分离

对于一个多通道矩阵m,将所有向量的第一个值组成的单通道矩阵作为第一个通道,将所有向量的第二个值组成的单通道矩阵作为第二通道,依此类推。
使用opencv提供的split函数可分离多通道,这些单通道矩阵被存放在vector容器中。

Vector<Mat> planes;
split(m, planes);

同样可以将多个具有相同尺寸和数据类型的单通道矩阵合并为一个多通道矩阵。

二.通道合并

利用merge函数可以将多个单通道矩阵合并为一个多通道矩阵

void merge(const Mat* mv, Size_t count, OutputArray dst);

例如,将三个2行2列的int类型的单通道矩阵合并为一个多通道矩阵:

Mat plane0 = (Mat_<int>(2,2) << 1,2,3,4);
Mat plane1 = (Mat_<int>(2,2) << 5,6,7,8);
Mat plane2 = (Mat_<int>(2,2) << 9,10,11,12);
Mat planes[] = {plane0, plane1, plane2};
Mat mat;
merge(planes, 3, mat);

以上将三个单通道矩阵存储在一个Mat数组中,也可以将其存储在Vector中:

void merge(InputArrays mv, OutputArray dst);

实现多个单通道矩阵的合并。

Vector<Mat> planes;
planes.push_back(plane0);
planes.push_back(plane1);
planes.push_back(plane2);
Mat mat;
merge(planes, mat);