自己编译的opencv,之前文章有说添加了这个接口,也有上传3.3.0版本添加这个接口之后编译好的库,但是没有把实现过程展现出来,导致有些朋友问我如何实现的,今天把这个实现放出来,实现就是个简单的调用而已
自己添加的clearVec()接口,用于清除vector类型的列表。因为在外部调用opencv有的接口时,其传出了vector列表,传出的这个列表是在opencv中分配的内存,如果外部程序不预处理,则在其析构时会导致程序崩溃,所以这个列表也必需放在opencv中来清除。
这个接口不分opencv版本。
在头文件 modules\imgproc\include\opencv2\imgproc.hpp 中添加如下接口的声明:
/*
delete all the vector things
by Ligo, 2018.7.30
reference:
https://blog.csdn.net/liyuanbhu/article/details/50363670
https://blog.csdn.net/zhengudaoer/article/details/73796261
*/
template
CV_EXPORTS_W void clearVec(std::vector<_Tp> &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector> &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
template CV_EXPORTS_W void clearVec(std::vector &vecs);
我添加的位置是在 getTextSize() 接口之后,LineIterator 类前面的注释之前。注意这个数据类型的列表,有可能不全,如果还有新的数据类型,应该全部加上来,当然如果有哪位朋友发现漏了哪个类型的列表,希望在下面留言,以便我也及时更新上来。
在文件 modules\imgproc\src\contours.cpp 的结尾位置添加接口的实现:
template
void cv::clearVec(std::vector<_Tp> &vecs)
{
vecs.clear();
vecs.resize(0);
vecs.shrink_to_fit();
}
添加完之后重新编译编译即可.
2022.4.12:
早前添加此接口的背景,以及接口的使用测试:opencv传出vector的参数在析构时挂掉的处理_red-fly的博客-CSDN博客
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)