Android 開發過程中爲了實現代碼的高效性,通常要調用本地c++代碼,JNI是java語言提供的和c/c++相互溝通的機制,在使用opencv做圖像處理時,通常要調用c/c++代碼進行相關操作,將處理後的結果返回java進行顯示或者其他操作。
可以在java部分創建一個Mat,用於保存圖像處理結果圖像,獲取Mat 的本地地址傳入jni函數中:
// java
Mat res = new Mat();
jni_fun(res.getNativeObjAddr());
//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
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);
...
...
}