将1通道图像转换为3通道

时间:2012-04-02 03:46:13

标签: opencv

我试图在OpenCV 2.3.1中将1通道图像(16位)转换为3通道图像。我在使用合并功能时遇到问题并收到以下错误:

    Mat temp, tmp2;
    Mat hud;
    tmp2 = cv_ptr->image;
    tmp2.convertTo(temp, CV_16UC1);
    temp = temp.t();
    cv::flip(temp, temp, 1);
    resize(temp, temp, Size(320, 240));
    merge(temp, 3, hud);

错误:没有匹配函数来调用'merge(cv :: Mat&,int,cv :: Mat&)'

任何人都可以帮我吗?提前谢谢!

3 个答案:

答案 0 :(得分:12)

如果temp是要转换为3个频道的1频道矩阵,则以下内容将有效:

cv::Mat out;
cv::Mat in[] = {temp, temp, temp};
cv::merge(in, 3, out);

查看Documenation了解详情。

答案 1 :(得分:2)

这是一种解决方案,在从其创建3通道图像之前不需要复制单通道图像。此解决方案的内存占用量比使用合并的解决方案少3倍(通过上面的volting)。 如果您想了解其工作原理

,请参阅cv :: mixChannels的openCV文档
// copy channel 0 from the first image to all channels of the second image
int from_to[] = { 0,0, 0,1, 0,2}; 
Mat threeChannelImage(singleChannelImage.size(), CV_8UC3);
mixChannels(&singleChannelImage, 1, & threeChannelImage, 1, from_to, 3);

答案 2 :(得分:1)

您似乎没有正确使用merge。您需要指定要“合并”的所有通道。我想你想要一个三通道框架,所有通道都相同,在Python中我会写这个:

cv.Merge(temp, temp, temp, None, hud)

来自opencv documentation

  

cvMerge:从多个单通道阵列组成多通道阵列或将单个通道插入阵列。