Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定模块化OpenCV应用程序的语言/框架 这是怎么回事? 我们有一个C++应用程序,它使用“强”> OpenCV < /St>处理视频图像处理和计算机视觉,我们将从头开始重写,需要一些帮助来决定使用什么技术。更具体地说,我需要关于如何选择要使用的技术的帮助 关于应用程序_C++_Opencv_C++11_Programming Languages_Objective C++ - Fatal编程技术网

确定模块化OpenCV应用程序的语言/框架 这是怎么回事? 我们有一个C++应用程序,它使用“强”> OpenCV < /St>处理视频图像处理和计算机视觉,我们将从头开始重写,需要一些帮助来决定使用什么技术。更具体地说,我需要关于如何选择要使用的技术的帮助 关于应用程序

确定模块化OpenCV应用程序的语言/框架 这是怎么回事? 我们有一个C++应用程序,它使用“强”> OpenCV < /St>处理视频图像处理和计算机视觉,我们将从头开始重写,需要一些帮助来决定使用什么技术。更具体地说,我需要关于如何选择要使用的技术的帮助 关于应用程序,c++,opencv,c++11,programming-languages,objective-c++,C++,Opencv,C++11,Programming Languages,Objective C++,应用程序的功能分为模块,这些模块按配置XML文件定义的顺序调用,也可以在运行时更改,但不能实时更改(即应用程序不需要关闭,但处理将从头开始)。这些模块在中央数据池中共享数据 为什么我们要从头开始? 这个应用程序并没有像它目前所努力的那样具有动态性,所以它已经成长为一个bug补丁、宏和变通方法的集合;它现在充满了内存泄漏、不必要的QT依赖、QT和OpenCV图像格式之间的缓慢转换,编译和测试时间增长太多 语言选择 原代码使用C++,只是因为最初启动项目的人只知道C++。这可能是一个很好的选择,因

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

为什么我们要从头开始? 这个应用程序并没有像它目前所努力的那样具有动态性,所以它已经成长为一个bug补丁、宏和变通方法的集合;它现在充满了内存泄漏、不必要的QT依赖、QT和OpenCV图像格式之间的缓慢转换,编译和测试时间增长太多


语言选择 <>原代码使用C++,只是因为最初启动项目的人只知道C++。这可能是一个很好的选择,因为我们需要它尽可能快,但考虑到应用程序的动态特性,可能会有更好的选择

我们受到OpenCV支持的语言的限制(主要是C++、Java和Python;尽管我已经读到了对Ruby、Ch、C#和任何JVM语言的支持)

需要什么
  • 速度:我们的目标是实时跟踪。这可能会排除Python和Ruby
  • < > >强> >名称< /Stand >:虽然我们的C++宏和类注册系统工作,但是设计为动态的语言,具有自己的运行时间是很好的。可能是Objective-C++或Java
什么是理想的
  • 模块/插件/扩展/组件框架:为什么要重新发明轮子,为此使用一个好的框架可以让我们专注于我们的应用程序的特殊之处。这里有很多选择。Objective-C有它的NSBundles;C++有Boost、扩展、Pula、DyNoBJ、FxEngine等库;C有C-Pluff;我甚至会说有太多的选择
  • 运行时类加载和重新加载:从开发的角度来看,能够只编译和重新加载一个模块会很有趣。我在Objective-C中通过代码注入和使用Java的反射实现了这一点

我错过了什么? 我有太多有趣的选择

这里是我需要帮助的地方,基于您在模块化应用程序开发方面的经验,在这种限制下,我应该寻找什么样的语言/框架功能

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


编辑 我没有注意到OpenCV只为C++提供了GPU绑定,所以我被它所困扰。 既然语言已经固定,搜索范围就缩小了很多。我可以使用Objective-C++获得所需的动态性(来自Cocoa/GnuStep/Cocotron的Obj-C运行时+NSBundle),这听起来很复杂;或者C++的框架。 因此,我现在将我的问题缩小到:

  • 在Objective-C++中以跨平台的方式使用NSBundle是否比听起来更容易
  • 什么样的C++框架会为我提供可热交换模块?< /LI>
  • 在运行时交换模块的主要原因是能够快速地更改代码,这是更好的解决方案吗
Meta:我研究了如何提出这样的问题,我希望这是可以接受的

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

如果您需要GPU支持(CUDA/OCL),您唯一的选择是C++。 您可以安全地放弃C,因为它在不久的将来将不受支持

不必担心python,即使您需要直接像素访问,这些都是numpy阵列(再次运行c代码)


<>我对Ruby、C.Ch CH等有点怀疑,因为这些绑定是基于社区的,可能不是最新的/正确维护的,而java和python绑定是由C++ API生成的。并且是官方发行版的一部分。

如果您希望具有可移植性,并且有大量内存可供处理,那么您可以使用Java。 C++和java之间的性能比较不错。对于Mat和其他图像格式之间的转换,我仍然不确定,因为它需要深度复制来执行,所以如果您的代码可以以openCV本机格式显示图像,那么您可以加快应用程序的速度

赞成者:

  • 您可以不再担心内存泄漏
  • 与C/C++相比,该项目的可移植性要高得多(如果可以避免使用大小不一致的原始数据类型,例如在C中始终使用int*\t,则这可能是错误的)
缺点:

  • 比C/C慢++
  • 需要更多内存和CPU时钟

使用OpenCV的C++ API和合理设计,内存泄漏是一个非问题。JavaAPI的问题是JNI可能会成为性能的瓶颈。是的,我认为合理的设计是关键,这是我们重写这篇文章的主要原因。无论我们选择哪种语言,原生OpenCV图像显示都是我们首先要做的事情之一。内存不会是一个好的设计和一些智能指针的问题,我认为Java足够快,但我没有考虑到JNI可能是一个瓶颈,每帧有数千个OpenCV调用,JVM现在看起来不太好…这是我没有考虑到的,我确实需要GPU支持,我还没有使用Python绑定,没有办法使用GPU吗?如果不是,那么我就被C++所吸引(不是坏事)。对于GPU来说,没有Python(或java)绑定::Mat或OCL::Mat ATM,因此在这种情况下,你被C++所粘住了。