【避坑指南】避免几个坑,OpenCV的轮廓分析速度也可以很快!
前一篇请看CSDN 博文
【性能飞升】OpenCV-Python改动一行代码性能提升百倍以上
学习《OpenCV应用开发:入门、进阶与工程化实践》一书
做真正的OpenCV开发者,从入门到入职,一步到位!
缘由
这个是跟CCL分析速度很慢的姊妹篇文章,还是下面这张图,我用OpenCV实验大师工具软件进行轮廓分析的时候发现速度非常慢,大概需要6000毫秒左右,这个让自己都很不好意思说什么,但是我肯定这个不是OpenCV的问题,是合理使用的问题,于是我开启了针对相关代码的仔细检查。
原因分析与代码修改
首先排除findContours函数很慢这种错误说法,亲测针对3200x3200,有上千个轮廓的二值图像,OpenCV4.8版本的findContours函数运行时间不到9毫秒即可完成。我的代码会循环每个轮廓然后对它们做各种统计处理,其中有两个最值得怀疑的地方,
第一个地方是因为OpenCV本身没有求最大内接圆的函数,所以我自己写了一个,这个里面调用了OpenCV的点多边形测试pointPolygonTest函数,这个函数多个循环很容易造成性能瓶颈,以前我就这样被坑过,直接把这个函数替换了。
第二个函数就是针对轮廓点有个拟合直线的操作,这种不分析轮廓横纵比直接拟合直线操作毫无必要,个人感觉那个fitLine是针对所有点实现最小二乘的,这样下去搞上千次,感觉容易成为瓶颈,所以本人就大胆把这两个毫无必要的操作都给注释了,然后在开发环境下启动OpenCV实验大师工具软件重新测试,奇迹发生了,运行速度从原来的6000毫秒左右变成了500毫秒左右了
同样修改了C++ SDK以后,测试结果从原来的2000多毫秒,直接下降到70多毫秒,从此我又相信OpenCV了。测试结果截图如下:
后记:
用好一个框架,扬长避短,解决实际问题,零代码实现多种OpenCV算法集成与快速交付,请选择 OpenCV实验大师工具软件 及其支持C++ /Python SDK,让你事半功倍,十倍提升OpenCV项目交付速度。
OpenCV C++ 工作流引擎SDK开发与集成视频教程点击这里
点击这里下载 OpenCV实验大师工具软件