繁体   English   中英

用于图像处理应用程序的C ++和Java通信

[英]C++ and Java Communication for image processing application

我必须构建用于图像处理的软件。 我使用Java来显示图像,使用C ++来显示应用程序的功能。 显然,图像将从C ++发送到Java,反之亦然。 我为选择用于通信c ++和java的方法感到困惑。 我学习并进行了大量研究,终于找到了3种方法:

  1. JNI(java本机接口)

  2. 管道

  3. 插座。 哪种方法更好选择? 我必须处理高达10MB的高清图像。 请帮助我。

如果c ++应用程序可以作为命令行应用程序安装和访问(例如:FFMpeg,MLT等),请遵循以下说明...

  1. 使用Java中的运行时进程执行Runtime.exec()访问c ++应用程序。 与其他选项相比,这将节省您很多精力。
  2. 排队实施以简化集群处理环境中的执行(流量很高时)
  3. 错误处理/运行时进程执行的日志记录

参考: 通过命令行与JNI调用

我也在同一问题上工作。 作为一种专业的方式,根据我的上一个基准测试,使用JNI从Java调用C ++ DLL是最好的方法。 JNA是另一种方式,但它速度较慢,并且某些功能(例如,两侧对象映射和传递引用问题)的机会较少。 10 MB也是一个很小的数目,我尝试使用2 GB图像进行尝试,并且JNI成功地成功处理了大文件(不必担心10 MB文件,JNI为您提供了更多)。 您可以为功能编写C ++ DLL,还可以实现Java接口以使用JNI调用它们。 为此,提出了一个新的替代方案,称为巴拿马项目。 我认为JNI是在巴拿马完成交易之前最好的方法,我们将看到巴拿马将是最好的,否则JNI将保持目前的位置。

由于性能原因,JNI是绝对必须的。 但是,使用起来非常不便,因此这就是为什么我在JNI之上创建了一些工具来促进JNI与C ++的结合的原因: JavaCVJavaCPP 我最初是出于我自己在Java中进行图像处理的目的而开发它们的,因此它们应该非常适合您自己的目的。 观看ProCamTracker演示视频,ProCamTracker是我用它们构建的应用程序。 实时效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM