首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenCV (JavaCV)与OpenCV (C/C++接口)

OpenCV (JavaCV)与OpenCV (C/C++接口)
EN

Stack Overflow用户
提问于 2014-01-19 01:58:14
回答 2查看 21K关注 0票数 23

我只是想知道,与OpenCV的C/C++实现相比,在一组给定的机器上使用JavaCV是否会有显着的速度性能优势。

如果我错了,请纠正我,但我的理解是,OpenCV的c/c++实现更接近机器,而作为opencv的Java实现,JavaC会有轻微的速度性能劣势(以毫秒为单位),因为会有一个虚拟机将您的源代码转换为字节码,然后字节码被转换为机器码。然而,使用c/c++,它会直接转换成机器代码,因此不会带来虚拟机开销的中间步骤。

如果我犯了错误,请不要在这里杀了我;我只是在学习,欢迎建设性的批评。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-01-19 02:03:53

JavaCV接口到OpenCV,所以当你调用与OpenCV相关的东西时,会有一些开销,但一般来说,大部分繁重的工作仍然在C++端,因此不会有很大的性能损失。

您必须进行性能基准测试才能了解更多信息。

PS。我是个新手,但我很确定这不是一个适合StackOverflow的问题。

票数 4
EN

Stack Overflow用户

发布于 2014-03-20 10:09:15

我想补充一些关于java作为c++库的接口的见解……

A)开发:

1)虽然java可能更容易管理大型项目,并且编译速度极快,但它非常非常困难,几乎不可能从java中调试本机代码……

当本机side...or上的代码崩溃内存泄漏时(经常发生的事情...)你会觉得有点无助。

2)除非你自己构建绑定(即使使用swig或其他工具也不是一件容易的事情……)您依赖于绑定构建器的良好意愿/健康/时间...所以在这种情况下,我更喜欢官方的“桌面java”绑定,而不是javacv…

B)性能。

1)虽然绑定可能会被优化(使用新缓冲区进行内存传输),就像在javacv中一样,但对于每个本机函数调用,仍然有非常非常小的jni开销-在我们的例子中,这是没有意义的,因为与这种jni开销相比,大多数opencv函数消耗X100000++ cpu周期...

2)大问题-停止世界垃圾收集器( GC )

java使用垃圾收集器暂停所有cpu的线程,使其不适合实时应用程序的,有一些变通的iv'e听说像重新设计你的应用程序不产生垃圾,使用太空船gc,或使用实时java(成本金钱...)他们似乎都是额外的工作(所有你想要的是一个很好的简单途径到opencv……)

结论--如果你想创建一个专业的实时应用,那就使用c++吧,除非你有一个庞大的模块化项目要管理--只要坚持使用c++和预编译头文件(让编译速度更快……)虽然使用java是一件令人愉快的事情,但当涉及到本机绑定的地狱突破时……我知道我曾经经历过……

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21207755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档