当前位置:C++技术网 > 资讯 > opencv编程:20 opencv2与opencv3的版本冲突

opencv编程:20 opencv2与opencv3的版本冲突

更新时间:2017-01-18 14:43:14浏览次数:1+次

使用OpenCV2开发的算法,但是在OpenCV3中已经取消了对该算法的支持,但是总平台是配置的OpenCV3,怎么集成进去呢?

C++技术网会员解答:

    Opencv是开源库,我们有源码,就可以对源码进行各种处理。OpenCV作为最先进的开源计算机视觉库,更新频率也不断加快,版本迭代也越来越快。版本之间的冲突问题也越来越明显。

    一般来说,新版本都是对旧版本的完善和改进,还会引入更多的功能支持,去掉不好的,或者不再需要的功能支持,而用新的功能模块来替代。如果说opencv3取消了对一些opencv2的算法的支持,很可能在3中有类似的算法替换了,或者用另外的策略替换了这个算法。计算这个算法是有用的,就不会去掉的,只可能被替代了。

    0.多个版本共存的情况,请尽可能保持统一的版本,这样问题最少。所以,这里建议你去找opencv3的文档,看看2的算法模块被哪些模块替换了。如果找到了,那就将2的模块改用新算法模块改写。

    当然,这样的情况不一定会发生。所以下面再给其他方法来解决这个问题。

    opencv是开源库,我们是可以得到源码的。所谓取消支持,也就是opencv没有实现这个功能模块而已。官方觉得应该去掉,你觉得不应该去掉,是不是你可以自己加进去呢?

    你可以按照下面这个流程来尝试:

1.看看低版本算法代码编译后生成的库新版是不是直接支持调用,而不要限制于新版本没有提供。

    一般高版本只是对于接口方式、功能模块等进行升级,对于库的调用,多数是不会怎么变化的,也就是可以向下兼容的。我们可以用低版本生成功能库,然后高版本一样可以去调用库。至于库里是如何实现的,who cares?库是二进制的数据了,只要能够调用就行了。

    这种方式需要注意的问题就是,库接口的兼容,甚至你可以简单包装,做成标准C风格库接口,各种语言和库都可以调用,何止高低版本的问题。

2.直接改造低版本的算法代码,改动的只是对外的接口部分,将源码加入项目使用,不要编译成库。

    低版本移除了某些算法模块,不就是没有将源码含入高版本源码中,这就是不支持的意思。那我们可以自己将低版本的这个算法库按照高版本的写法,改造一下,然后和其他模块一样调用。这个难度会高一些,不过对于熟悉opencv是很有好处的。

3.按高版本的接口包装低版本的算法,编译成库,供高版本使用。

    如果觉得直接将代码改造直接使用显得麻烦,你可以将代码编译成库,以后就可以轻松的复用。


    我们的目标是将低版本的代码放到高版本去使用,要么就是寻找高版本替换的模块,要么就是调用低版本形成的库,要么就是直接改造代码直接使用,要么就是再将改造后的代码封装成库使用。总有一种方法是可以行得通的。

    源码面前了无秘密。开源的库的好处,就是可以折腾源码。所以可以很灵活,不过就是需要对代码很了解,不然也是醉了。总体来看,方案1是推荐的,会比较快些。如果还有问题,可以继续提问。

    PS: 记得在用户中心填下邮箱和QQ,方便交流和通知解答结果。