我试图在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&)'
任何人都可以帮我吗?提前谢谢!
答案 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:从多个单通道阵列组成多通道阵列或将单个通道插入阵列。