Zejun Lin's Blog

异国漂泊,野蛮生长

0%

杂谈:关于openCV与Random Ferns

Picture1.png-517kB

一次关于源码嵌套的失败经历

一种消耗耐力和心智的血的教训

记录于此,权当警示


这是一次关于opencv特征点匹配的实验,要求使用SURF, ORG, SIFT和FERN等算法,再用RANSAC做野点消除等,做成一个应用程序。

在openCV3中,其将额外的机器学习库封装成另外一个模块contrib,需从github clone下来并与openCV 3联合编译,在本次实验中,因为其他算法的实现均采用openCV 3配和QT,针对此算法本也打算采用openCV 3,但在一波折腾终于搭好环境之后,发现fern-based算法在openCV 3已经被砍掉,只存在于2版本中,又由于其他算法和UI界面均已实现,无奈另寻他路:

  1. 其中一个想法是,从编译完成的openCV 2中挖取相关的legacy头文件以及相关的动态连接库文件,镶嵌到openCV 3中,因为相关的依赖和其他破破烂烂的问题,折腾了一天之后该方法以失败告终
  2. 当天晚上萌生出另外一种想法,即是直接编译openCV 2相关模块的源码,于是便干脆起床,将legacy模块下面的cpp源码以及头文件导入到项目工程里面,其他接口仍是采用3的代码。不出意外,出现了一堆命名以及新旧代码之间的前后不兼容错误,于是不断查各种类的前后区别和命名区别以及位置区别,改了一宿的错误,然而错误似乎无穷无尽,轻易间即将耗尽我有限的生命,天色已亮,再次以失败告终。
  3. 深刻地明白了精卫填海的不切实际之后,老老实实地另外安装了openCV 2,并单独调用其中的fern相关的代码进行图像匹配。

教训:
在对某个大工程源码的整体架构的相关类代码没有清晰的了解之前,仅凭毅力胡乱嵌套别人不同版本或者不同软件代码是一件十分危险的事情,不仅费时费力吃力不讨好,而且容易消耗尽自己的精力和耐心,落得个心力交瘁的结果。