我正在为基于 Camera2Raw 的应用程序使用 camera2 api .
mRawImageReader = ImageReader.newInstance(largestRaw.getWidth(),
largestRaw.getHeight(),ImageFormat.RAW_SENSOR, /*maxImages*/
我有来自 ImageReader.OnImageAvailableListener
的 image
,我没有保存 DNG 文件,而是将其字节数组传递给我的 native 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 数据并非易事 - 它是传感器像素值的原始读数,您需要大量额外的元数据和处理才能将其转换为可 View 像。如果您不知道该怎么做,我不建议您尝试 - 您可以插入像 Adobe's DNG SDK 这样的库。 , 或 libraw .
你确定你不想要 YUV_420_888 数据,它是经过处理但未压缩的吗?
关于android - 如何使用 JNI+OpenCV+NDK 获取原始的 android 相机传感器图像数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201434/