opencv添加的新接口clearVec

opencv添加的新接口clearVec,第1张

自己编译的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博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/722240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存