有关List中pushback()的用法及释放注意事项
2014-07-24 11:17
501 查看
针对创建的list型数据,如:
typedef IplImage image_type;
typedef list< image_type* > image_list_type;
image_list_type inputImage;
当向 inputImage里面加入图像帧进去时:
frame = cvQueryFrame(cap);
if( !frame)
break;
imshow("frame",frame);
cvWaitKey(1);
dst_cvsize.width = WIDTH; //目标图像的宽为源图象宽的scale倍
dst_cvsize.height =HEIGHT; //目标图像的高为源图象高的scale倍
dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels); //构造目标图象
cvResize(frame, dst, CV_INTER_LINEAR); //缩放源图像到目标图像
inputImage.push_back(dst);
由于dst是指针型数据,push_back(dst)只是传进去了一个指针,也就是让inputImage的一个元素(指针)指向由这条语句:dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels);
所申请的内存中。
最后,当用完inputImage后,要释放时,得分两步:1.释放指针所指向的内存区域(此时也就释放了由dst = cvCreateImage()所创建的内存);2.删除inputImage元素。
如下:
for (image_list_type::iterator _iteratorForDeal=inputImage.begin();_iteratorForDeal!=inputImage.end();_iteratorForDeal++)
{
IplImage* _imgForDeal=*_iteratorForDeal;
cvReleaseImage(&_imgForDeal);
}
for (image_list_type::iterator ir_del=inputImage.begin();inputImage.end()!=ir_del;) //刚开始时,m_curcolortrack_list为空
{
ir_del=inputImage.erase(ir_del);//以容器为单位进行删除,此处就不是以索引号。
}
第二步也可这样:直接inputImage.clear();
typedef IplImage image_type;
typedef list< image_type* > image_list_type;
image_list_type inputImage;
当向 inputImage里面加入图像帧进去时:
frame = cvQueryFrame(cap);
if( !frame)
break;
imshow("frame",frame);
cvWaitKey(1);
dst_cvsize.width = WIDTH; //目标图像的宽为源图象宽的scale倍
dst_cvsize.height =HEIGHT; //目标图像的高为源图象高的scale倍
dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels); //构造目标图象
cvResize(frame, dst, CV_INTER_LINEAR); //缩放源图像到目标图像
inputImage.push_back(dst);
由于dst是指针型数据,push_back(dst)只是传进去了一个指针,也就是让inputImage的一个元素(指针)指向由这条语句:dst = cvCreateImage( dst_cvsize, frame->depth,frame->nChannels);
所申请的内存中。
最后,当用完inputImage后,要释放时,得分两步:1.释放指针所指向的内存区域(此时也就释放了由dst = cvCreateImage()所创建的内存);2.删除inputImage元素。
如下:
for (image_list_type::iterator _iteratorForDeal=inputImage.begin();_iteratorForDeal!=inputImage.end();_iteratorForDeal++)
{
IplImage* _imgForDeal=*_iteratorForDeal;
cvReleaseImage(&_imgForDeal);
}
for (image_list_type::iterator ir_del=inputImage.begin();inputImage.end()!=ir_del;) //刚开始时,m_curcolortrack_list为空
{
ir_del=inputImage.erase(ir_del);//以容器为单位进行删除,此处就不是以索引号。
}
第二步也可这样:直接inputImage.clear();
相关文章推荐
- linq list select用法注意事项
- ThinkPHP的html:list标签简要用法及注意事项
- linq list select用法注意事项
- ThinkPHP的html:list标签简要用法及注意事项
- ThinkPHP的html:list标签简要用法及注意事项
- 有关VA_LIST的用法
- document.createElement()用法及注意事项
- innerText,innerHTML的用法以及注意事项
- 关于VML一些用法的注意事项
- [新人培训之3 ] svn 用法 SVN 使用之注意事项[zt]
- 访问Excel应用程序的有关注意事项
- document.createElement()用法及注意事项
- SET NOCOUNT的用法和注意事项
- Mysql中limit的用法方法详解与注意事项
- Delphi中须注意的二个对象(TStreamAdapter、TObjectList)的释放问题
- typedef用法注意事项
- 从kernel源代码的角度分析signal的错误用法和注意事项
- 有关VA_LIST的用法
- richfaces的modalPanel用法注意事项
- document.createElement()用法及注意事项 01