如何查看和移植OpenCV源码

如何查看OpenCV源码

 

  1. 在OpenCV的安装文件夹中,找到D:\opencv-4.2.0\modules文件夹,里边就按照modules的功能分成多个子文件夹,每个子文件夹中的src目录下就存放了源码cpp文件,也包括hpp文件。

         实例:找到FAST特征提取算法源码

         从modules\features2d\src文件夹中,可以找到该算法的头文件和cpp文件如下

               

       2. 正确的查看opencv源码的方式:用vs code打开文件夹功能,打开opencv/modules文件夹,里边就是分模块子文件夹,每种模块的include/src文件都可以找到。最好的是在vs code里边同一个文件夹的不同文件之间,可以直接链接过去,非常便于查看源码。

 

如何移植OpenCV源码 

 

以移植orb算法为例,基于opencv4.2的orb算法为基础,目标是把该算法代码移植出来进行修改和优化,并能在新的项目中编译生成新的程序。

由于在opencv4.2之后都是基于C++类的模式构建的,所以在移植时也是基于类的结构进行移植。

Step1. 提取ORB的接口类:opencv的类设计时都采用接口类和实施类分离的做法,即接口类只放置跟用户使用相关的函数和属性,比如setProperty(), getProperty(),而跟用户使用不相关的部分则放在另一个继承的实施类中。该类继承自Feature2D,可修改为自定义的新类名,但如果为了沿用原有类中所使用的其他opencv元素,最好把该类也加到cv命名空间中去,否则该类中所用的一些变量/类/函数会因为没有命名空间支持而找不到。同时为了能够获取到父类的信息,需要引入父类所在的头文件。例如下图就是提取的ORB类,改名为自定义的MyORB,依然继承自Feature2D.

 

Step2. 提取ORB的实施类:该实施类不仅要实施接口类所定义的与用户使用相关的函数,也需要实施跟底层算法相关的函数。

注意:opencv中为了做算法加速,增加了较多的跟opencv/hal相关的头文件,在算法测试时可以考虑注释掉这部分头文件内容。

 

Step3. 可能面临的移植问题

- 避免跟opencv重复定义:由于移植出来的算法中使用的都是opencv的源码,且加入到cv命名空间,所以如果名称一致则会报错重复定义。解决方案就是把自己需要修改的模块修改为另一个名称,而自己不需要修改的部分尽可能沿用opencv现有的部分,不要移植出来,避免重复定义。

- 引用的opencv部分需要增加头文件:移植后可能需新增额外的opencv头文件来支持部分函数或类

- 把自定义的函数也加入到cv命名空间中去,从而opencv自带的大部分定义就能够找到源头,从而不会报错。这样就能够最大程度利用opencv现有代码,从而可以专注在需要修改的部分去。

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值