到目前为止,我已经了解到merge()是将特定 channel 从源复制到目标的一种选择,但是我似乎无法完全理解如何实现此目的。

我的示例代码:

Mat_<float> my_grayscale_image = load_image(some_image, CV_LOAD_IMAGE_GRAYSCALE);
Mat_<Vec2f> my_grayscale_2chan;

所以基本上我想将灰度图像my_grayscale_image复制到新的2通道图像my_grayscale_2chan的第一个通道中。

我希望有人能指出正确的方向,谢谢。

最佳答案

cv::merge用于将多个Mat对象合并到单个Mat中,例如您可以从2个Mat_<Vec2f>组成Mat_<float>

Mat_<float> first, second;
Mat_<Vec2f> result;
Mat tmp[] = { first, second };
merge(tmp, sizeof(tmp)/sizeof(Mat), result);

要将通道复制到现有的Mat对象中,可以使用通用mixChannels函数。或者,您的案例有一个无证的简写形式:
//void cv::insertChannel(InputArray _src, InputOutputArray _dst, int coi)
insertChannel(my_grayscale_image, my_grayscale_2chan, 0);

关于opencv - 将灰色图像复制到Mat_ <Vec2f>类型的第一个 channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12542418/

10-11 21:28