我正在实现一些方法,我正在使用OpenCv函数。
我使用视频的许多帧,我需要实现最好的代码,以避免内存的一些问题。我有些疑惑:
怀疑1 :怎么会更好?
选项1 :
IplImage * image1 = NULL;
...
IplImage * picture_sintetica(..){
...
if (image1 == NULL){
image1 = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 3);
}
...
}
选项2 :
IplImage * image1 = NULL;
...
IplImage * picture_sintetica(...){
...
image1 = cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 3);
...
cvReleaseImage(&image1);
}
我认为在选项2中,image1被创建多次(每次调用名为picture_sintetica的方法)并且使用选项1它将只创建一次,但我不确定...而在其他我见过使用选项2的例子。
怀疑2:它等效声明图像等于零(IplImage * image1 = 0;),为NULL(IplImage * image1 = NULL;)o放置任何东西(IplImage * image1; )?
怀疑3:何时建议使用名为cvCloneImage的函数,何时使用cvCopy更好?
非常感谢!
答案 0 :(得分:0)
从 Doubt3 开始,根据opencv documentation,您需要在需要图像的完整副本(包括标题,数据和ROI)时使用cvCloneImage。
Doubt1:查看您的代码,没有理由认为image1应该多次创建,除非您的代码在cicle中。
怀疑2:我建议您查看this answer