我们有一个C ++应用程序,使用 OpenCV 处理视频的图像处理和计算机视觉,我们将从头开始重写它,需要一些帮助来决定使用哪些技术。更具体地说,我需要帮助如何选择我使用的技术。
应用程序的功能分为模块,它们按照配置XML文件定义的顺序调用,也可以在运行时更改,但不能实时更改(即应用程序不需要关闭,但处理将从头开始)。这些模块在中央数据池中共享数据。
这个应用程序并没有像现在的那样具有动态性,因此它已经发展成为一系列错误的补丁,宏和解决方法;它现在充满了内存泄漏,不必要的QT依赖性,QT和OpenCV图像格式之间的转换速度慢,编译和测试时间也增长得太多。
原始代码使用的是C ++,只是因为最初启动项目的人只是知道 C ++。这可能是一个不错的选择,因为我们需要尽可能快,但可能有更好的选择来考虑应用程序的动态特性。
我们受限于OpenCV支持的语言(主要是C ++,Java和Python;虽然我读过也支持Ruby,Ch,C#和任何JVM语言)
我有太多有趣的选择!
这里是我需要帮助的地方,根据您在模块化应用开发方面的经验,有这些限制,我应该寻找什么样的语言/框架功能?
我应该对这个让我缩小搜索范围的项目有什么问题?
我没有注意到OpenCV只有C ++的GPU绑定,所以我坚持使用它。
现在语言已修复,搜索范围缩小了很多。我可以使用Objective-C ++来获得所需的动态(来自Cocoa / GnuStep / Cocotron的Obj-C运行时+ NSBundle),这听起来很复杂;或带有框架的C ++。
所以我现在将我的问题缩小到:
Meta :我就如何提出这样的问题进行了研究,我希望这是可以接受的。
答案 0 :(得分:1)
“我应该对这个让我缩小搜索范围的项目提出什么问题?”
如果您需要gpu支持(cuda / ocl),您唯一的选择是c ++。
你可以安全地丢弃C,因为它不会在不久的将来得到支持
不用担心python,即使你需要直接像素访问,也就是所有numpy数组(再次运行c代码)
我对ruby,c#ch等有点怀疑,因为这些绑定是基于社区的,并且可能不是最新/正确维护,而java& python绑定是机器 - 由c ++ api生成,是官方发行版的一部分。
答案 1 :(得分:1)
如果您正在寻找可移植性并且有大量内存可供处理,那么您可以使用Java。 C ++和Java之间的性能差距并不大。对于Mat和其他图像格式之间的转换,我仍然不确定,因为它需要深层复制才能执行,因此如果您的代码可以以openCV原生格式显示图像,那么您可以固定应用程序
亲:
缺点:
http://www.ibm.com/developerworks/java/library/j-jtp09275/index.html