我正在尝试将android pictureCallback解码为灰度垫:
首先我尝试使用rawPicture回调但总是得到空指针。
mCamera.takePicture(null, mPicture, null);
JpegCalback给出的不是null byte []数组,但是cvtColor转换不起作用。
mCamera.takePicture(null, null, mPicture);
我的预览回调就是这个
Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Toast.makeText(getApplicationContext(),"picture taken",Toast.LENGTH_SHORT);
int res=JniManager.setImage(data,m_width,m_height);
mCamera.stopPreview();
mCamera.startPreview();
}
};
c ++ JNI功能:
Java_pidaas_vicomtech_org_facerec_viulib_JniManager_setImage(JNIEnv *env,
jobject instance,
jbyteArray image,
jint width,
jint height)
jbyte* _yuv = env->GetByteArrayElements(image, 0);
int len = env->GetArrayLength (image);
unsigned char* buf = new unsigned char[len];
env->GetByteArrayRegion (image, 0, len, reinterpret_cast<jbyte*>(buf));
Mat rawData (cv::Size(width,height), CV_8UC3, buf );
cv::Mat test =imdecode(rawData,CV_LOAD_IMAGE_COLOR);
cv::Mat grey;
cv::cvtColor(test, grey, cv::COLOR_BGR2GRAY);
bool flag = imwrite("/sdcard/graypg.jpg", grey);
env->ReleaseByteArrayElements(image, _yuv, 0);
}
我找到了一些答案,但没有一个有效。
我因为测试而在sdcard上写图像,但是它写了一个0字节的空图像。
所以,任何人都知道如何将jpeg像素作为灰色格式?
答案 0 :(得分:1)
也许getarraylenght不能正常工作并返回0.我通常使用lenght作为宽度x高度,提供参数来计算数组大小。这会将数据从相机缓冲区复制到内存中。
警告:如果尺寸有问题,您将遇到Signal 11异常!