是它沒關係這樣做的,代碼段當然是不完全的,只是爲了說明我的意思:OpenCV和(不)返回IplImages,什麼時候可以,什麼時候沒有?
void draw(IplImage* image){
cvLine(image,cvPoint(20,20),cvPoint(100,100),cvScalar(0,0,255),1);}
int main(){
cvNamedWindow("preview",CV_WINDOW_AUTOSIZE);
IplImage* image;
image=cvCreateImage(cvSize(480,360),8,3);
while(true){
draw(image);
cvShowImage("preview",image);
int ops=cvWaitKey(10)
if ops!=-1 break;}
cvReleaseImage(&image);cvDestroyWindow("preview");return 0;
}
還是會造成問題,如果我不返回IplImage結構是這樣的:
IplImage* draw(IplImage* image){
cvLine(image,cvPoint(20,20),cvPoint(100,100),cvScalar(0,0,255),1);return image;}
好吧,我問的原因是,如果我不返回IplImage有時它的工作原理。然而,在其他情況下,我可能會收到某種空指針錯誤消息。例如,如果我釋放函數中的圖像,然後在此之後重新創建它,仍然處於該函數中,可能會發生崩潰。
()你是將指針'image'(指向IplImage結構...)的副本傳遞給函數void draw(IplImage * image){} ...在繪製函數內部,指向圖像的指針的副本被去參照並用於修改圖像(在你的案例中畫一條線......)所以不需要返回...如果你還回來,那麼也是一個警察y返回不是在main()中創建的原始圖像指針... –
感謝您的評論rotate_image。我想我明白。如果我返回的圖像,你說的副本增加工作內存,並可能導致內存溢出? I.o.w.會返回圖像也沒關係? – user1331044
將指針的副本傳遞給IplImage並不意味着你正在傳遞圖像的副本...其指向圖像的指針的副本...所以在32位機器上,指向圖像的指針的大小爲4個字節。 ..我不認爲這會導致內存溢出,如果你在循環中使用它也..但如果你使用cvCreateImage或cvLoadImage沒有cvReleaseImage循環內,那麼它可以導致內存溢出... –