4

当我尝试使用 cvCopy 一个由 3 个通道组成的 IplImage 到一个具有 4 个通道的 IplImage(我稍后需要额外的通道)时,我得到的只是一条错误消息。

是否有另一种方法可以增加 IplImage 的通道数而不会丢失它已经拥有的数据?

谢谢!

4

2 回答 2

7

使用cvMixChannels,如下所示:

CvMat * src; // your source image
CvMat * dst // your destination image
CvMat * zeros = cvCreateMat(src->cols, src->rows, CV_8UC1);
cvSet(zeros, cvScalar(0, 0, 0, 0));
CvArr * input[] = { src, zeros };
int from_to[] = { 0,0, 1,1, 2,2, 3,3 };
cvMixChannels(input, 2, &dst, 1, from_to, 4);

与 cvSplit 和 cvMerge 不同,它将只执行必要的复制操作。

于 2011-07-29T12:23:04.057 回答
2

我不确定,我建议的方式是最简单的:

  1. 您可以先使用 cvSplit() 将图像拆分为 3 个单独的图像(每个通道一个)
  2. 然后你用 3 个通道重构一个 4 个通道 + 你将使用函数 cvMerge() 添加的那个......

看看这里的文档,

朱利安,

于 2011-07-29T11:40:32.817 回答