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;
};
}