我是靠谱客的博主 沉静荔枝,这篇文章主要介绍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轮廓提取(边缘检测)后随机删除部分点内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部