Search code examples
c++opencviplimage

Opencv copy 3 channel IplImage to 4 channel IplImage


When I try to use cvCopy a IplImage consisting of 3 channels to a IplImage with 4 channels (I need the extra channel later) all I get is an error message.

Is there another way to increase the channel count of an IplImage without loosing the data that it already holds?

Thanks!


Solution

  • Use cvMixChannels, like this:

    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);
    

    It will perform only the copy operations that are neccessary, unlike cvSplit and cvMerge.