Opencv копирует 3-х канальный IplImage в 4-х канальный IplImage - PullRequest
4 голосов
/ 29 июля 2011

Когда я пытаюсь использовать cvCopy IplImage, состоящий из 3 каналов, к IplImage с 4 каналами (мне нужен дополнительный канал позже), все, что я получаю, это сообщение об ошибке.

Есть ли другой способ увеличить количество каналов IplImage без потери данных, которые он уже содержит?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 29 июля 2011

Используйте 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.

2 голосов
/ 29 июля 2011

Я не уверен, самый простой способ, который я собираюсь предложить:

  1. Вы можете сначала разделить изображение с помощью cvSplit () на 3 отдельных изображения (по одному для каждого канала)
  2. Затем вы рекомендуете 4 канала, один с 3 каналами + тот, который вы добавите, используя функцию cvMerge () ....

Посмотрите документацию здесь,

Жюльен,

...