我是靠谱客的博主 沉静荔枝,最近开发中收集的这篇文章主要介绍opencv轮廓提取(边缘检测)后随机删除部分点,以减少运算量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

opencv不论是轮廓提取,还是边缘检测,都会得到很多点,一般来讲都会有几千个点,不论是查找直线,还是查找圆,对几千个点进行处理,都需要耗费很多时间。而很多时候,我们不需要这么多点,我们想要的结果是:随机的删除一些点,比如删除一半的点。

c++中vector容器用的较多,所有的点都存放在vector中,vector从末尾删除数据的效率很高,但是从中间删除的话,效率很低,如果从中间删除,3000个点中删除1500个点,估计会耗费几十ms的时间,这显然是不能够接受的。

本文提供的函数,可以实现vector中3000个点,删除1500个点,仅耗费不到1ms的时间,

下面贴出详细的代码,经过验证,可直接使用

欢迎大家交流


int chao_delete_part_point(vector<Point> &point_list, int delete_num)
{
int num = point_list.size() - delete_num;
if (num < 10) return 0;
int idx = point_list.size();
while (true)
{
idx--;
if (idx < num) break;
int idx1 = chao_get_rand_num(0, point_list.size() - 2);
swap(point_list[idx1], point_list[point_list.size() - 1]);
point_list.pop_back();
}
return 0;
}



int chao_get_rand_num(int min, int max)//得到min与max之间的随机整数
{
int num = rand() % (max - min + 1) + min;
return num;
}


相信看懂了之后,就觉得很简单,,就是把需要删除的点,替换到vector的末尾,从末尾删除。


最后

以上就是沉静荔枝为你收集整理的opencv轮廓提取(边缘检测)后随机删除部分点,以减少运算量的全部内容,希望文章能够帮你解决opencv轮廓提取(边缘检测)后随机删除部分点,以减少运算量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部