簡體   English   中英

Android 設備中的 OpenCV Java API 或 OpenCV C++ API?

[英]OpenCV Java API or OpenCV C++ API in Android devices?

我見過兩種在 Android 設備中使用 OpenCV 的方法:

  1. 使用 Java OpenCV API
  2. 使用 C++ OpenCV API

我的問題是:哪個更好、更快、更容易配置/編碼? 或者,如果我的問題是錯誤的,每種方式的優缺點是什么? 我閱讀了 OpenCV 文檔和幾篇文章,但找不到我的問題的答案。

我想它必須對您的應用程序的實現做更多的事情。 它是 Java 還是 C++(本機)應用程序? 圖像處理是應用程序的重要負載嗎? 您需要計算速度還是執行速度? 無論如何,我已經通過 JNI 和 NDK 在 Java 中使用了 OpenCV(C++ 實現)。 我的應用程序的核心是圖像處理,處理速度非常符合我的興趣(幾乎是實時的)。 一切都是用 C++ 編寫的,因為我有我的成像系統的桌面和移動實現。

在移動應用程序(適用於 android)中,我的成像系統嵌入在一個 java 應用程序中。 從這里,我看到處理分為兩部分:圖像采集(通過設備攝像頭)和圖像處理(通過 OpenCV)。 圖像采集全部用java進行。 這項工作並非微不足道,因為我發現的主要問題是從相機(本地 YUV)獲取 RGB 幀,將它們傳遞給 OpenCV,從 OpenCV 接收結果並將它們渲染到應用程序的表面視圖。

連接相機和 OpenCV 確實令人頭疼,這主要取決於您的設備功能和 SDK 版本。 獲取圖像后,處理相對輕松。 我所有的系統之前都在我的 PC 上調試過,我確切地知道會發生什么。 所有 OpenCV 函數都按其應有的方式運行,因此我對這部分幾乎沒有問題。

我也花了很多時間在 C++ 上工作,所以這是決定選擇什么樣的實現的一個因素。 現在,該應用程序已基本設置完畢。 我可以添加新功能並在我的 PC 上測試它們,並相當快地更新移動端口。

OpenCV Java API 是在 Android 上使用 OpenCV 的標准方式。 它基本上是 C++ API 之上的 Java 層,其中每個 OpenCV Java 函數都通過 JNI( Java 本機接口)調用其 C++ 等效項。

進行 JNI 調用會產生少量開銷,從而在使用 Java API 時增加 OpenCV 函數的執行時間。 如果您的圖像處理管道對 OpenCV 函數進行了大量調用(假設為 N 次調用),那么 JNI 調用開銷將影響管道的 N 倍,這會減慢您的總計算時間。

另一種方法是用 C++ 實現整個圖像處理管道,並從 Java 調用該 C++ 代碼,將開銷減少到僅一個 JNI 調用。

OpenCV C++ 優點:

  1. 速度
  2. 現有 C++ 代碼的可重用性
  3. 所有 OpenCV API 可用

OpenCV Java 優點:

  1. 更容易部署
  2. 更容易實施
  3. 更容易調試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM