2011-07-29 47 views
4

當我嘗試使用cvCopy包含3個通道的IplImage到帶有4個通道的IplImage(我後來需要額外的通道)時,我得到的只是一條錯誤消息。Opencv複製3通道IplImage到4通道IplImage

是否有另一種方法來增加IplImage的通道數而不會丟失它已經擁有的數據?

謝謝!

回答

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

將只執行復制操作是neccessary,不像cvSplit和cvMerge。

+0

「函數cvMixChannels是cvSplit和cvMerge以及某些形式的cvCvtColor的一般形式。」 - Holy OpenCV文檔如此說。所以你可以簡單地使用cvSplit和cvMerge來做同樣的事情。 –

+2

如果你看看源代碼,你會發現實際上cvSplit和cvMerge是cvMixChannels的特例。因此,cvSplit一個圖像和cvMerge的渠道再次是不一樣的單cvMixChannels調用。 (雖然cvSplit和cvMerge不調用cvMixChannels,但它們的代碼基本相同,但是fromTo值是硬編碼的。) –

2

我不知道,我要去的方式暗示是最簡單的一個:

  1. 你可以先用cvSplit()劃分成圖像3個獨立的圖像 (每個通道)
  2. 然後要重構一個4個通道一個3個通道+一個你 將增加使用功能cvMerge()....

看看這裏的文檔,

朱利安,