在Android上处理相机帧

时间:2011-08-01 16:10:24

标签: android

我想使用我的Android手机来处理图片,例如,制作任何图片 使用de frame进行操作并显示更改(显示图像) 黑/白,灰度,棕褐色等)。 这是我的代码:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback,PreviewCallback {
    SurfaceHolder mHolder; 
    Camera mCamera;

    private Parameters parameters; 
    private Size previewSize; 
    private int[] pixels; 
    public CameraPreview(Context context) { 
    super(context); 
    SurfaceHolder mHolder = getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL); 
    this.setFocusable(true); 
    this.requestFocus(); 
}
public void surfaceCreated(SurfaceHolder holder) { 
    mCamera = Camera.open(); 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    mCamera.stopPreview(); 
    mCamera.release(); 
    mCamera = null; 
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
setImageSize(); 
mCamera.startPreview(); 
mCamera.setPreviewCallback(this); 
}
public void onPreviewFrame(byte[] data, Camera camera) { 
    // transforms NV21 pixel data into RGB pixels 
    decodeYUV420SP(pixels, data, previewSize.width, previewSize.height); 
    //here process the image 
    }
}

问题是我不知道如何显示处理的新图像。 在onPreviewFrame我将yuv转换为rgb,然后我处理图像,即 转换为灰度,但我做了什么显示新的图像? 我需要帮助,谢谢!!!!!!!!!!!

2 个答案:

答案 0 :(得分:2)

您可能需要考虑使用OpenCV或查看其中一个样本进行图像处理:

http://opencv.itseez.com/doc/tutorials/introduction/android_binary_package/android_binary_package.html

答案 1 :(得分:0)

我在http://nhenze.net/?p=107阅读了一篇文章 从我在帖子中看到的内容来看,这并不容易,因为onPreviewFrame不会与显示帧同步。

相反,他们使用技巧在SurfaceView上设置另一个视图。在新视图上,它们使用OpenGL ES在OpenGL纹理上渲染图像。

我自己没有玩过它,但希望这会让你朝着正确的方向前进。