我必須構建用於圖像處理的軟件。我用java來顯示圖像和C++的應用程序的功能。很明顯,圖像將從C++發送到Java,反之亦然。 我很困惑爲哪種方法選擇溝通C++和java。我學習和做大量的研究,終於發現3的方法:用於圖像處理應用的C++和Java通信
JNI(Java本地接口)
管道
- 插槽。 哪種方法會更好選擇?我必須處理高達10MB的高清圖像。請幫助我們。
我必須構建用於圖像處理的軟件。我用java來顯示圖像和C++的應用程序的功能。很明顯,圖像將從C++發送到Java,反之亦然。 我很困惑爲哪種方法選擇溝通C++和java。我學習和做大量的研究,終於發現3的方法:用於圖像處理應用的C++和Java通信
JNI(Java本地接口)
管道
如果C++應用程序可以被安裝並作爲命令行應用程序訪問(例如:FFmpeg的,MLT等),按照下列...
Runtime.exec()
。 這會比其他選項節省很多努力。我也同樣的工作問題。作爲一種專業的方式,根據我的上一次基準測試,使用JNI從java調用C++ DLL是最好的方法。 JNA是另一種方式,但速度較慢,並且對於某些功能(例如兩個側面對象映射和通過參考問題)的機會較少。 10 MB也是小數目,我用2 GB圖像試了一下,JNI成功了那個大文件沒有任何問題(從來不關心10 MB文件,JNI給你更多)。您可以爲您的功能編寫一個C++ DLL,並且可以實現一個Java接口以使用JNI調用它們。一個新的替代方案被稱爲巴拿馬項目。我認爲JNI是達到巴拿馬完成日期的最佳方式,我們會看到巴拿馬將是最好的,否則JNI將持有現在的位置。
但是dll不會與linux一起工作。我必須在linux上啓動 – 2014-09-29 12:08:25
這並不重要,你可以在Linux中使用.so庫而不是在Windows中使用dll。 – 2014-09-29 13:27:10
我應該閱讀圖像在哪些數據類型在C++?所以我可以在java中顯示它 – 2014-09-30 05:56:06
由於性能原因,JNI是絕對必須的。但是,使用起來相當不方便,所以這就是爲什麼我在JNI之上創建了工具來促進JNI與C++的使用:JavaCV和JavaCPP。我最初爲了我自己的Java圖像處理目的開發它們,因此它們應該完全適合您自己的目的。查看demo video of ProCamTracker,我用它們製作的應用程序。它實時運行良好。
但是每次調用新進程都會降低性能 – 2014-09-29 10:15:03
由於命令行執行將直接引用資源(圖像),因此您在一定程度上避免了磁盤I/O約束。如果您需要關注在服務器上運行的多個並行進程,請執行步驟#2。 – 2014-09-29 11:46:20