2011-11-21 106 views
0
IplImage *img; 
img = (IplImage **)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    img = cvLoadImage(filename, 0); 
} 

嗨!這段代碼在這裏產生錯誤:在分配無法轉換「的IplImage ** {又名_IplImage * }」到「的IplImage {又名_IplImage *}」。我想在這裏加載多個圖像。我究竟做錯了什麼?謝謝!錯誤轉換的IplImage **來的IplImage *

回答

0

你聲明「IMG」是一個指針IplImage的,然後你想將其轉換爲指針的指針。 (IplImage**) - 由於您試圖將IplImage **分配給IplImage *,因此此類型轉換對於此特定情況不正確。

申報IMG爲:的IplImage ** IMG;

+0

如果IMG被聲明爲的IplImage ** IMG,那我怎麼才能訪問它的寬度和高度?我怎樣才能正確使用函數作爲cvSetImageROI?什麼是正確的語法,因爲我在聲明如上所述的img後遇到問題。非常感謝你! – cmsl

+0

可以這樣想:如果我們聲明一個指向對象或任意數據類型的指針,比如int * pointerToInt;我們可以使這個指針指向(簡單地說)一個整數數組。如果我們這樣做(無論是靜態的還是動態的),我們可以通過說:pointerToInt [N]來訪問我們數組的第N個成員。請注意,即使我們動態聲明數組(int * pointerToInt = new int [MagicalNumber])並因此確實聲明我們有指針,我們仍然可以通過數組下標運算符[]來訪問它。所以pointerToInt [MagicalNumber-1]的作品。同樣適用於2D陣列。 – ScarletAmaranth

+0

我們有int ** pointerToIntPointer - 它聲明瞭一個指向指針的指針。動態分配這將涉及一個循環,我不想在這裏詳細說明,但我們可以靜態地說:int pointerToIntPointer [MagicalNumber0] [MagicalNumber1];然後用數組下標運算符訪問數組--int int pointerToIntPointer [MagicalNumber0-1] [MagicalNumber1-1];我們可以對動態分配的數組執行相同的語法,它類似於「原始指針」多一點。同時不要忘記刪除[]你動態分配的數組! :) 只是在說'。 – ScarletAmaranth

0

試試這個

IplImage** img; 
img = (IplImage**)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    *img = cvLoadImage(filename, 0); 
} 

順便說一下,下一個錯誤,你會得到的將是每個循環後沒有進展的IMG指針迭代

0

嘗試宣告IplImage** img;,然後img[index] = cvLoadImage(filename, 0),因爲img是一個IplImage指針數組和cvLoadImage()返回一個圖像。