OpenCV和OpenVX有什么联系和区别?

参考:https://www.zhihu.com/question/37894914

移植opencv到嵌入式arm详细过程:https://blog.csdn.net/Guet_Kite/article/details/78667175

 

作者:xupeng2202
链接:https://www.zhihu.com/question/37894914/answer/199714413
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

刚开始转行做计算机视觉嵌入式,被老板分配任务学习OpenVX,做了一周多了,来谈谈我自己的看法。
不知道是不是因为OpenVX才刚发展起来没多久,感觉资料真是少之又少,例子少,连实现都很少。所以这里只从宏观上解释一下这两者的区别和联系吧。
---------------------------
先简单说一下OpenVX到底是个什么东西吧。OpenVX标准其实就是个骨架而已,只有一些头文件声明了很多宏、枚举、变量类型、函数等等,而这些函数还不能用,因为只有声明没有实现。想要实现,就得有人写出cpp文件来,把头文件里的函数定义好了,这才能被开发者调用。
为啥要定义这么个标准呢?其实是这样,大家知道各种硬件厂商生产的芯片结构功能差别很大,同样的c语言代码在不同硬件上实现起来性能也有很大差异,所以想要最大程度发挥硬件性能,必须针对硬件本身进行代码优化。这样,同样的算法,不同硬件优化以后的代码是不一样的,这就对开发者造成很大困扰,因为一旦要换平台实现某个功能,原来的代码就不能用了。为了解决这个问题,很多家硬件厂商(包括Intel、AMD、TI、Apple等等)就坐在一起商量,开能不能制定一个统一的标准,让开发者只关注在算法实现上面而不是硬件上的各种小问题。硬件本身肯定是生产硬件的厂家最熟悉,那么那些由于硬件设备不同导致的代码差异部分由厂家来实现就最好了,这样既能充分利用硬件本身,又能方便开发人员。
这些大佬们坐在一起解决类似问题不是第一次了,早在本世纪初他们就成立了一个组织叫Khronos Group,专门搞这种跨平台标准,而且这些标准都是开源的,比较出名的OpenCL、OpenGL标准等等都是他们制定的。但注意,OpenCV并不是这个组织搞出来的,它是由Intel建立,后来由Willow Garage支持维护的开源计算机视觉库。
好了,讲到这儿大伙儿应该明白OpenVX标准制定的目的了,说白了就是为了实现了跨平台加速处理。接下来说一下它的基本加速原理。其实呢,图像处理就是对图片矩阵数组进行一系列操作,然后从结果中找出我们想要的信息。每一次对图像的基本操作都可以看成整个流程中的一个节点(node),这个节点通过自己处理前和处理后的图像和其他节点相连,形成一个网络,我们这里叫graph。硬件开发商需要做的之一,就是想办法针对自己的硬件实现node的代码,使之符合OpenVX的标准且能在自己的硬件上得到优化。接下来,开发者就只需要把这些node连成graph,实现自己的功能。最后,开发商再针对自己的硬件对graph进行优化加速。
如此一来,开发者的工作量就被大大削减了,可以缩短开发周期,提高代码可移植性。
那么有人会问,如果厂家实现的这些node满足不了我的需要怎么办?这时OpenVX提供了一种自定义node的机制,它使得用户可以根据自己的需要编写node,并最终和graph相融合。自己写node就和之前的开发一样了,你可以选择利用OpenCV中的函数,也可以自己编写处理操作,还能通过OpenCL用GPU进行加速。但是不管怎样,都是放在OpenVX这个大框架中的。
从上面可以看出,OpenVX和OpenCV并不冲突,他们可以说是互补的,OpenVX在嵌入式和实时性系统中可以更好地发挥它的优势,在某些场合配合OpenCV的强大功能可以实现更好的效果。
以上....
(刚入坑不久,不专业之处请多包涵)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值