2012-10-22 34 views
0

我覺得我正在從函數中返回圖像的效率不高。如何從一個函數返回多個圖像?

如果我使用,

void processImg(IplImage* srcImg, IplImage* dstImg1, IplImage* dstImg2) 
{ 
....processing image 
cvCopy(..., dstImg1); 
cvCopy(..., dstImg2); 
} 

對於上面的例子,我怎麼能返回兩個圖像回來?

如果我使用IplImage * processImg(IplImage * srcImg,IplImage * dstImg1,IplImage * dstImg2),它只能返回一個圖像。

我怎樣才能返回基於這兩個功能的圖像?

+0

爲您列出它在問題發生指針dstImg1和dstImg2,如果您填寫這兩個的(像你cvCopy做),那麼他們將在函數返回之後保留自己的內容,你有有效的功能「返回「他們兩人。你能更具體的問題是什麼? – Hammer

+0

我是否正確地從一個函數返回兩個圖像?我看到一些帖子,這在編程中不是一個好習慣。 – Mzk

+0

C和C++不能有超過1個返回參數,我會非常有興趣看到那篇文章,如果它是在談論C或C++ ... – Hammer

回答

1

你在做什麼工作。您正在傳遞指向這兩個dst圖像的指針。這意味着如果您修改這些圖像,則實際上是在修改原始圖像。

如果不是你在找什麼,你真的想返回兩個圖像,你可以探索像列表或鏈表等數據結構。您可以將這兩個圖像放在該結構中並返回結構。

std::list<IplImage *> processImg(IplImage* srcImg) 
{ 
    std::list<IplImage *> image_list; 

    //....processing image 

    //create two ipl images pointers 
    IplImage *dstImg1, *dstImg2; 

    //allocate memory for the ipl images 

    //copy the data into images 
    cvCopy(..., &dstImg1); 
    cvCopy(..., &dstImg2); 

    //add the images to list 
    image_list.push_back(dstImg1); 
    image_list.push_back(dstImg2); 

    return image_list; 
} 
+0

「你正在傳遞指向這兩個dst圖像的指針,這意味着如果你修改這些圖像,你實際上是在修改原始圖像。」 我明白你的意思,但「你真的想要返回兩張圖片,你可以瀏覽其他數據結構,比如列表或鏈表,你可以把這兩個圖片放在這個結構中,然後返回結構。」我在這裏不太明白。你能解釋一下嗎? – Mzk

+0

除了Nick之外,std :: list沒有成員函數「add」 – Mzk

+0

使用push_back代替add。 – Nick