c++ - 为模块化 OpenCV 应用程序确定语言/框架

标签 c++ opencv c++11 programming-languages objective-c++

这是关于什么的?

我们有一个使用 OpenCV 处理视频图像处理和计算机视觉的 C++ 应用程序,我们打算从头开始重写它,需要一些帮助来决定使用什么技术。更具体地说,我在如何选择我要使用的技术方面需要帮助

关于应用

应用程序的功能分为模块,它们按配置 XML 文件定义的顺序调用,也可以在运行时更改,但不是实时更改(即应用程序不需要关闭,但处理将从头开始)。这些模块在中央数据池中共享数据。

我们为什么要从头开始?

这个应用程序并没有计划像它目前所努力的那样动态,所以它已经成长为一个有缺陷的补丁、宏和变通办法的集合;它现在充满了内存泄漏、不必要的 QT 依赖性、QT 和 OpenCV 图像格式之间的缓慢转换以及编译和测试时间增长太多。


语言选择

原始代码使用 C++,只是因为最初开始该项目的人只知道 C++。这可能是一个不错的选择,因为我们需要它尽可能快,但可能有更好的选择来考虑应用程序的动态特性。

我们受到 OpenCV 支持的语言的限制(主要是 C++、Java 和 Python;虽然我读过它也支持 Ruby、Ch、C# 和任何 JVM 语言)

需要什么

  • 速度:我们的目标是实时跟踪。这可能会排除 Python 和 Ruby。
  • 按名称实例化类:尽管我们的 C++ 宏和类注册系统可以正常工作,但设计为具有自己的运行时的动态语言会更好。也许是 Objective-C++ 或 Java。

什么是理想的

  • 模块/插件/扩展/组件框架:为什么要重新发明轮子,为此使用一个好的框架可以让我们专注于我们应用程序的特别之处。这里有很多选择。 Objective-C 有它的 NSBundles; C++ 有 Boost.Extension、Pluma、DynObj、FxEngine 等库; C有C-Pluff;我什至会说选择太多
  • 运行时类加载和重新加载:从开发的角度来看,能够编译和重新加载一个模块会很有趣。我已经看到这是通过在 Objective-C 中注入(inject)代码并使用 Java 的反射完成的。

我错过了什么?

我有太多有趣的选择了!

根据您在模块化应用程序开发方面的经验,在这种限制下,我应该寻找哪种语言/框架功能?

关于这个项目,我应该问自己什么问题来缩小搜索范围


编辑

我没有注意到 OpenCV 只为 C++ 提供 GPU 绑定(bind),所以我坚持使用它。

既然语言固定了,搜索范围就缩小了很多。我可以使用 Objective-C++ 来获得所需的活力(Obj-C 运行时 + 来自 Cocoa/GnuStep/Cocotron 的 NSBundle),这听起来很复杂;或带有框架的 C++。

所以我现在将我的问题缩小到:

  • 在 Objective-C++ 中以跨平台方式使用 NSBundle 是否比听起来更容易?
  • 哪种 C++ 框架可以为我提供热插拔模块?
  • 在运行时交换模块的主要原因是能够快速更改代码,Runtime-Compiled C++是更好的解决方案?

Meta:我研究过如何提出这样的问题,我希望它能被接受。

最佳答案

“关于这个项目,我应该问自己什么问题来缩小我的搜索范围?”

如果你需要gpu支持(cuda/ocl),你唯一的选择就是c++。

你可以安全地丢弃 C,因为它在不久的将来不会被支持

不用怕python,即使你需要直接访问像素,那都是numpy数组(再次运行c代码)

我对 ruby​​、c# ch 等有点怀疑,因为这些绑定(bind)是基于社区的,可能不是最新的/未正确维护,而 java 和 python 绑定(bind)是机器 - 从 c++ 生成api,并且是官方发行版的一部分。

关于c++ - 为模块化 OpenCV 应用程序确定语言/框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474053/

相关文章:

c++ - 使用可变参数模板和lambda函数进行二进制搜索

c++ - 根据两个属性对类指针的 vector 进行排序?

c# - 如何将结构从非托管 C++ 程序传递到 C# 程序?

c++ - 从 Windows 上的控制台应用程序获取 C++ 中的阿拉伯字符输入

Python-opencv : Read image data from stdin

c++ - 使用 Hough 变换检测圆

python-3.x - 如何将 PyCairo 表面转换为 OpenCV numpy 并在 Python 3 中返回

c++ - 在 Qt Creator 中调试应用程序时如何使 Qt 源代码可用?

c++ - 从 std::type_info 检索数据类型的大小

c++ - 这两个函数签名有什么区别?