我正在为基于Camera2Raw的应用程序使用camera2 api 。
mRawImageReader = ImageReader.newInstance(largestRaw.getWidth(),
largestRaw.getHeight(),ImageFormat.RAW_SENSOR, /*maxImages*/
我image
来自ImageReader.OnImageAvailableListener
,而不是保存DNG文件,而是将其字节数组传递给我的本机opencv函数进行处理:
int w = image.getWidth();
int h = image.getHeight();
ByteBuffer buffer = planes[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
addShot(w, h, data);
image.close();
和C ++函数:
JNIEXPORT jboolean JNICALL addShot(JNIEnv* env, jobject obj, jint width, jint height, jbyteArray p_data)
{
jbyte* _p_data= env->GetByteArrayElements(p_data, 0);
Mat srcBGR(height, width, CV_8UC3);
Mat mdata(height, width, CV_8UC3, (unsigned char *)_p_data);
// Mat tmp_mat= imdecode(mdata,1);
cvtColor(mdata, srcBGR, CV_RGB2BGR);
env->ReleaseByteArrayElements(p_data, _p_data, 0);
}
第一的。为了确保,我正在尝试将c另存为JPEG。但是结果有很多绿色。
我认为我的C ++代码中缺少部分。
有人可以帮忙吗?
处理Bayer RAW数据并非易事-它是传感器上像素值的原始读出,并且您需要大量额外的元数据和处理过程才能将其转换为可见图像。如果您不知道该怎么做,我不建议您尝试-您可以插入Adobe DNG SDK或libraw之类的库。
您确定不只是想要YUV_420_888数据,该数据已处理但未压缩?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句