在进行 图像识别 时需要把图片的二进制数据转成Mat数据。
jbyteArray–>转成Mat
JNI EXPORT jint JNICALL faceRecognByByte(JNIEnv *env, jclass jcls, j byte Array jbyte){、
//解码内存数据转换成Mat数据
Mat src_img;
env->GetByteArrayRegion(jbyte, 0, len , pData);
signed char* pData = new signed char[len];
for (int i = 0; i < len; ++i) {
data.push_back(pData[i]);
}
src_img = im decode (data, IMREAD _COLOR);
return 200;
}
说明:
在 java 里byte[]数据对应 c++ 里的jbyteArray类型数据。
c++中二进制数据通常用 signed char*来表示。
在 opencv 中有这个函数可以用来把二进制数据转成Mat数,
Mat imdecode( InputArray buf, int flags )
InputArray:对应的数据为 vector <uchar>
flags :表示转换的图片是否做灰度处理。