Я использую camera2 api для своего приложения, которое основано на Camera2Raw.Как получить исходные данные изображения датчика камеры Android с помощью JNI + OpenCV + NDK?
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);
}
Первый. для обеспечения уверенности, я пытаюсь сохранить как JPEG на стороне C++. Но результат имеет много зеленых цветов.
Я думаю, что в моем коде на C++ отсутствует часть.
Может ли кто-нибудь помочь в этом?
[Docs] (https://developer.android.com/reference/android/graphics/ImageFormat.html#RAW_SENSOR): «Общий формат изображения датчика сырой камеры, обычно представляющий одноканальное изображение Байер-мозаики. образец пикселя цвета хранится с 16 бит точности ». - Разве это не так в вашем случае? Потому что вы, кажется, относитесь к нему как к 3-канальному RGB-изображению с 8-битной точностью. Это кажется довольно странным. –
Да, правильно. Я думаю, что мой код на C++ может быть для другого случая, такого как формат YUV. Код, который я отправил, был моим испытанием, обработка изображений - это не моя область :(Поэтому я прошу помощи. Я был бы очень признателен, если бы кто-нибудь меня увел – imudin07
android-24 добавил NdkCamera, вы могли бы получить изображение с камеры прямо оттуда Файлы заголовков находятся под платформами NDK include/camera, include/media (для AImagerReader). – Gerry