findobj_ferns 问题的解决 imread

来源:互联网 发布:觉醒三少成长数据对比 编辑:程序博客网 时间:2024/04/28 14:57

Opencv 2.1 中新添加很多例程和方法,其中一个是 findobj_ferns ,相对于2.0里面的 findobj ,该例程的正确性确实很高,但是效率不敢恭维,实时性很差,用它自带的两张图片进行匹配,需要3,4分钟的样子,这实在不能令人接受,这也应该算是该算法的最大缺陷了。

findobj_ferns 没有采用经过封装的函数,而是更加底层的函数,图片的存取都是Mat格式,而不是我们熟悉的 Iplimage ,其他的操作也类似,由于数据格式的变化,所以操作起来得十分小心,不然会引发不可预见的灾难性后果!

 

转入正题,讲讲本人在用 findobj_ferns 的过程中遇到的问题。本人用的是 VS2008,装了 Opencv 2.1 (vs2008专用)版本,将例程 findobj_ferns 的源码复制到自己的程序框架中,调用的是2.1给我们编译好的lib,在运行的过程中,首先碰到的问题是函数 imread()无法读取图片,于是我将 imread() 改成 cvloadimage() ,再将格式转换成 Mat ,能够正常读取图片,但是程序运行到寻找匹配特征点时就崩溃了,有时在字符串处理时就出错了,都是内存方面的错误,难以下手,经过N多程序高手的治疗,依然不能解决,绝望之余,准备放弃该程序的调试。

 

奈何一天风和日丽,阳光明媚,心情爽朗之余,突然风云突变,雷电交加,难道暗示着不寻常的一刻即将来到?这一刻,我的老师听说我一个程序有问题,立马二话不说小试他的牛刀,我在一帮苦苦祈祷成功通过,无奈几个小时过去了,雷电继续,而程序继续出错。转而我们尝试用了我们自己用2.1里的源码编译的lib(注:用cmake编译2.1里的源码即可),众人翘首之际,算是苍天有眼,RP大爆发,居然通过了!于是,我们开始怀疑2.1自带的lib的问题,不知道这个lib是用什么源码编译的,为什么跟我们自己编译的lib的运行的结果不一样,自带的lib是否不支持imread 等2.1里新增加的函数?不得而知,所以,安全起见,本人把自己编译的lib作为了默认的lib,让它自带的lib见鬼去吧~~

 

自此,该问题已经解决,个人感觉opencv里还是有很多问题的,包括它的源码,也算是给有兴趣致力于这方面研究的GGMM提个醒吧~~不过话说回来,该算法效率实在低下,难以忍受,不知大家有何感想~

 

原创粉丝点击