专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

替opencv贡献代码

发布时间:2011-06-27 19:11:34 文章来源:www.iduyao.cn 采编人员:星星草
为opencv贡献代码

本文记录本人从发现bug,提交bug,到修复bug的过程。下面enjoy:

1.发现bug

  由于项目需要,开发了一个视频检测demo,类似于扫一扫二维码的程序,不过不是这个程序不是扫二维码。具体实现参照了这篇文章
  2016年10月20号,发现了第一个bug:在多次start,stop后,大约是6次,在iphone6平台上,程序就会闪退。检测了一下代码,发现不是自己造成的。再查看一下内存,发现opencv 的CvVideoCamera类在停止后不会销毁内存,导致内存泄漏(如图1)。于是向opencv维护组提交了第一个bug#7527
  pic1
                      图1:内存泄漏

2.修复bug

  2016年10月24号,周一早上,迫于压力(项目快要交付了,但是这个问题还没修复,等官方修复都不知道要等到猴年马月,于是决定自己动手解决),把oepncv 的官方源码拷贝到自己的工程下,然后xcode 就发现代码用了dealloc 方法和release方法,因为我的xcode环境用的ARC,所以MRC的手动内存管理方法不能使用,去掉后编译发现app没有问题了,于是开心的提交的解决方法。   
  但是很快就发现,代码虽然能在工程下完美运行,但是到了opencv的framework后不能工作了。一开始以为是自己编译的问题,所以搞了好久都没解决。
  下班后,一直都在纠结这个问题的原因所在,晚上洗澡时,突然想起:xcdoe在ARC模式下不是没有内存管理代码,而是由xcode在编译时自动加上去的,所以把dealloc删除后编译的framework里面的代码就缺少内存管理代码了,这就能解释为什么代码在工程里面时工作正常,但是到了framework后就不正常了。
  第二天,迫不及待的回来把代码改了,编译进framework,测试通过(如图2)。
  pic2 
                      图2:修复内存泄漏 

3.合并

  提交pull request#7568
  pic3
pic4
                      图3:代码被合并到master分支
          

note:
1.在xcode下编译的framework里面不需要内存管理代码,因为xcode自动添加上去了,但是oepncv的framework是使用Python脚本编译的
2.opencv for ios 的framework是通过opencv/platforms/ios/目录下的buil_framework.py脚本编译的,具体命令参照该目录下的readme.txt
3.第二个bug其实就是多次stop后,第二次时release的对象已经被释放了,所以导致程序crash #7570
4.第二个bug的PR #7571

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: