Rem*_*miX 4 android image image-processing augmented-reality android-camera
我正在开发一个增强现实应用,所以我需要捕捉相机预览,添加视觉效果,并在屏幕上显示.我想用这个onPreviewFrame方法做到这一点PreviewCallback.这给了我一个byte[]包含原始图像数据(YUV420编码)的变量.
即使我搜索了几个小时的解决方案,我找不到将这个byte[]变量转换为我可以使用的任何图像格式甚至在屏幕上绘制的方法.
最好是,我会将byte[]数据转换为某种RGB格式,可用于计算和绘图.
有没有正确的方法来做到这一点?
Bor*_*ree 12
几个月前,当我不得不对相机镜架进行边缘检测时,我偶然发现了同样的问题.这对我来说非常适合.试试看.
public void surfaceChanged(SurfaceHolder holder,int format, int width,int height)
{
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
int width = parameters.getPreviewSize().width;
int height = parameters.getPreviewSize().height;
ByteArrayOutputStream outstr = new ByteArrayOutputStream();
Rect rect = new Rect(0, 0, width, height);
YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,width,height,null);
yuvimage.compressToJpeg(rect, 100, outstr);
Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size());
}
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以将位图用于所有处理目的.获得感兴趣的像素,您可以轻松地在其上做RGB或HSV.
Imran Nazar撰写了关于增强现实的两部分教程,您可能会发现它很有用.虽然他最终使用NDK,但第一部分和第二部分大部分都是使用Java来详细说明您需要的东西.
我相信Bitmap.createBitmap是您需要的方法.