Android 通過jni返回Mat數據類型

Android 開發過程中爲了實現代碼的高效性,通常要調用本地c++代碼,JNI是java語言提供的和c/c++相互溝通的機制,在使用opencv做圖像處理時,通常要調用c/c++代碼進行相關操作,將處理後的結果返回java進行顯示或者其他操作。


可以在java部分創建一個Mat,用於保存圖像處理結果圖像,獲取Mat 的本地地址傳入jni函數中:

// java
Mat res = new Mat();
jni_fun(res.getNativeObjAddr());


c++部分新建Mat指針指向java傳入的內存區域,將處理後的結果圖像的Mat數據複製到這塊內存區域,這樣java中的創建的Mat就變爲結果圖像:

//jni  c++
void jni_fun(jlong Mataddr){
      Mat* res = (Mat*)MatAddr;
      Mat  image = ImgProcess();
      res->create(image.rows,image.cols,image.type());
      memcpy(res->data,image.data,image.rows*image.step);


如果需要將java中的圖像傳入c++進行處理,然後返回結果,道理一樣:
//java 
Mat res = new Mat();
jni_fun(srcMat.getNativeObjAddr(),res.getNativeObjAddr());

//c++
void jni_fun(jlong srcMat,jlong resMat){
       Mat* src = (Mat*)srcMat;
       Mat* res = (Mat*)srcMat;
       Mat image = ImgProcess(*src);
       ...
       ...
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章