1. 程式人生 > >cvCopy與cvCloneImage、cvCopyimage的區別

cvCopy與cvCloneImage、cvCopyimage的區別

如果設定了ROI等引數的時候,cvCopy只是複製被設定的區域,複製到一個和所設定引數相吻合的新的IplImage中
而cvCloneImage則是將整個IplImage結構複製到新的IplImage中,其中的ROI等引數也會一同複製。新的IplImage將會和原來的一模一樣。

cvCopy的原型是:
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
在使用這個函式之前,你必須用cvCreateImage()一類的函式先開一段記憶體,然後傳遞給dst。cvCopy會把src中的資料複製到dst的記憶體中。

cvCloneImage的原型是:
IplImage* cvCloneImage( const IplImage* image );
在使用函式之前,不用開闢記憶體。該函式會自己開一段記憶體,然後複製好image裡面的資料,然後把這段記憶體中的資料返回給你。

clone是把所有的都複製過來,也就是說不論你是否設定Roi,Coi等影響copy的引數,clone都會原封不動的克隆過來。

copy就不一樣,只會複製ROI區域等。用clone複製之後,源影象在記憶體中消失後,複製的影象也變了,而用copy複製,源影象消失後,複製的影象不變

cvCloneImage直接克隆錄影,包括影象的ROI資訊。
而cvCopyImage複製影象,複製影象的ROI部分。#define cvCopyImage( src, dst ) cvCopy( src, dst, 0 )
copy的影象大小必須和所設定的ROI大小一致,而clone的影象的大小必須與原影象一致。