我正在使用Android camera2构建图像处理程序。由于每个捕获帧的图像格式是YUV_420_888,我需要将其有效地转换为RGB以进行图像处理。我用Google搜索并阅读了很多内容(特别是以下两个链接),最后发现renderscript可能是解决方案。但是,我不知道如何在我的代码中使用yuv2rgb脚本。
http://werner-dittmann.blogspot.jp/2016/03/using-android-renderscript-to-convert.html
Convert android.media.Image (YUV_420_888) to Bitmap
目前,我使用TextureView表面来显示预览,并使用ImageReader捕获onImageAvailable函数中的每个YUV_420_888帧。
protected void createCameraPreview() {
try {
SurfaceTexture texture = textureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());
Surface surface = new Surface(texture);
Surface mImageSurface = mImageReader.getSurface();
captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface)
List surfaces = new ArrayList<>();
surfaces.add(surface);
surfaces.add(mImageSurface);
captureRequestBuilder.addTarget(mImageSurface);
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);
cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback(){
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
//The camera is already closed
if (null == cameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(MainActivity.this, "Configuration change", Toast.LENGTH_SHORT).show();
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image img = null;
img = reader.acquireNextImage(); // we got YUV_420_888 frame here
// transform to RGB format here?
// image processing
}
};
如何更新我的代码以实现目标(例如,使用yuv2rgb.rs)?感谢。
答案 0 :(得分:2)
使用RenderScript进行图像处理的camera2示例应用程序HdrViewfinder可能有助于如何连接相机和RenderScript:https://github.com/googlesamples/android-HdrViewfinder
它不进行YUV-> RGB转换,IIRC,我认为yuv2rgb.rs可能用于与相机产生的不同YUV色彩空间(由于向后兼容性问题 - 它存在于camera2之前)。但是它可以帮助您编写自己的RS脚本以应用于摄像机数据。