在 Tegra K1 上用opencv4tegra 不包含的功能以及ROS使用OpenCV问题

(1)在NVIDIA 官方提供的opencv4tegra中,与opencv原版的包相比会缺少一些库。如果需要使用这一类库,则需要自己进行编译,当然,根据英伟达官方的说法,这会让用户失去体验opencv4tegra中专门针对CPU和GPU进行优化的一些特性(虽然笔者并没有在实际应用中体会到优化的部分,也没查到相关源代码的区别)。另一种方法,是将opencv源码与自己的项目一起编译(天啊,太复杂了)。由于笔者有多台机子,每台机子编译一遍简直太复杂了,为了解决这个问题,做了如下尝试:编译一次openCV代码,编译完以后,将确实模块的库文件找到,添加进opencv4tegra的安装路径,这样,既可以保留所谓的opencv4tegra的优良特性,同时还可以使用surf,sift等等一系列算法,简直太方便了。
(2)具体编译的过程,在这里就不具体讲了,需要注意的是,在板子上编译,记得先装好cuda,显卡的架构上必须填上Kepler,否则编译的过程,会报错。编译完成以后,makeinstall 到一个自己制定的文件夹,不要install到/user/local或者/usr之类的地方,以免替换了opencv4tegra版本的东西。
(3)Make install 以后,我们可以发现insall到的文件夹下面有lib、share、include等等文件夹。最先想到的当然是把include和lib下的nonfree模块 的lib和include文件复制到/usr/local里面了。于是,失败了。Cmake根本找不到那堆库,头文件也找不到,除非,手动指定绝对路径,当然,这个必须不是我想要的。继续比较opencv4tegra安装路径和我们自己编译包安装路径下的文件差异。首先是include里面的,在include里面,我们看到有个叫opencv_modules.hpp的文件,打开,加上nonfree模块的include。这回,cmake可以找到include文件了。然而,lib文件,还是悲剧了。继续查找,在pkgconfig的opencv.pc里面发现问题了,这里面要手工在Libs里面添加上-lopencv_nonfree。然后,问题还出在share文件夹里面这里面几个文件挺关键的,关系到cmake能否找到这堆库。Cmake需要在这些文件里预先定义这些库的路径和信息,对比这几个文件,把nonfree模块的信息从我们自己编译的包里面复制过来。Ok,大功告成。这回可以使用sift和surf算法了。
       为了方便大家,笔者根据自己编译的模块和做的改动写了个脚本,并把需要替换的文件一并发出来。拿到Opencv_nonfree_ocl以后解压,直接以管理员身份运行installnonfree.sh即可安装opencv中nonfree和ocl的库。
       此外,在使用ROS过程中,还发现ROS找不到opencv库的错误,这是由于ROS找的是opencv2.4.8的库,而opencv4tegra用的是2.4.12的库,找不到文件导致的。解决方法是修改ROS的设置文件。文件位置在\opt\ros\jade\lib\pkgconfig\cv_bridge.pc,打开,将里面的Libs一行里面的2.4.8改成2.4.12即可

此文章来自Jetson技术大咖Br2原创,转载请标明出处。

在 Tegra K1 上用opencv4tegra 不包含的功能以及ROS使用OpenCV问题

Opencv_nonfree_ocl.rar

651.54 KB, 下载次数: 0


原文发布时间为:2016-7-14 15:26:48
原文由:十四王爷 发布,版权归属于原作者 
本文来自云栖社区合作伙伴NVIDIA,了解相关信息可以关注NVIDIA官方网站
上一篇:深度学习技术在网络入侵检测中的应用


下一篇:阿里云突发性能实例t5升级baseline测评