OpenCV trong Android

java
jni
native-c

(Quyền Phạm) #1

Mình đang làm việc với OpenCV trên Android. Mình có một class xử lý ảnh viết bằng native C++ và cần truyền ảnh chụp từ java vào đây để xử lý. Ảnh đó được chuyển thành Mat và truyền vào native class có kiểu dữ liệu là cv::Mat.
Mọi người cho mình hỏi Mat trong Android vs cv::Mat trong C++ có giống nhau không? Nếu không giống thì làm thế nào để gửi ảnh chụp từ java vào native class được ạ?
Java code:

ByteBuffer byteBuffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
Bitmap mbitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
Mat mymat = new Mat();
Utils.bitmapToMat(mbitmap, mymat);
try {
    int test = getvalue(mymat.nativeObj);
    Log.d(TAG, "run: " + test);
}catch (Exception e){
    e.printStackTrace();
}

Native code:

JNIEXPORT jint JNICALL Java_com_example_version1_CaptureImage_00024ImageSave_getvalue
        (JNIEnv*, jobject, jlong inpAddr){ 
    cv::Mat* inMat = (cv::Mat*) inpAddr;
    cv::Mat image = *inMat;
    PreProcess *ptr_process = new PreProcess(image, 200, 300);
    ptr_process->EdgeProcess();
    return ptr_process->action;
};
}

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?