uel*_*rdi 5 android opencv image-processing android-ndk
我正在尝试将android pictureCallback解码为灰度垫:
首先我尝试使用rawPicture回调但总是得到空指针.
mCamera.takePicture(null, mPicture, null);
Run Code Online (Sandbox Code Playgroud)
JpegCalback给我不是null byte []数组,但cvtColor转换不起作用.
mCamera.takePicture(null, null, mPicture);
Run Code Online (Sandbox Code Playgroud)
我的预览回调就是这个
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();
}
};
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
我找到了一些答案,但没有一个有效.
我因为测试而在sdcard上写图像,但是它写了一个0字节的空图像.
所以,任何人都知道如何将jpeg像素作为灰色格式?
也许 getarraylenght 无法正常工作并返回 0。我通常使用长度作为宽度 x 高度,提供的参数用于计算数组大小。这会将数据从相机缓冲区正确复制到内存。
警告:如果尺寸有问题,您将收到 Signal 11 异常!
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |