创建预览相机图像的可处理缓冲区

Creating processable buffer of previewed camera image

我需要在 Android 上准备一个视觉系统样本 - 图像处理的东西。有许多样本具有相机预览功能,例如。 Sample

问题是我无法访问图像,所以我可以在相机捕捉和预览之间处理图像或在图像上绘图。

如何将预览导出到位图或任何可在单像素级别处理的内容?如何将其导出回屏幕进行调试?

我尝试修改示例中的代码,将表面视图更改为位图并进行修改。不幸的是,我不知道如何 return 返回表面视图:

    public CameraPreview (Context context)
        : base (context)
    {
        surfaceView = new SurfaceView (context);


        windowManager = Context.GetSystemService (Context.WindowService).JavaCast<IWindowManager> ();

        IsPreviewing = false;

        Bitmap drawingCache = surfaceView.DrawingCache;
        Bitmap bitmap = Bitmap.CreateBitmap(drawingCache);

        for(int n = 0; n < 100; n++) {bitmap.SetPixel(n,n,Color.Black); } //I created this for debugging purposes, just to check if everything works fine

        holder = surfaceView.Holder;

        holder.AddCallback (this);
        surfaceView = // HERE I HAVE TO CONVERT BITMAP INTO SURFACE

        AddView (surfaceView);
    }

这是 Xamarin 中的所有内容,但我还检查了 android arsenal 和 android 开发人员网站上的示例 - 这个示例只是我找到的最简单的示例。

问候

Android 上支持的流程是实时预览与为图像处理提供像素的相机数据回调分开。

如果您使用TextureSurface,您可以应用任何OpenGL着色器来操纵实时预览,但这是有限的;将像素从 OpenGL 传递到 CPU 是可能的,但速度太慢,无法跟上可接受的实时预览 FPS。

您可以使用 OpenCV,并将您的图像处理代码放在 onCameraFrame() 回调中。回调的结果 (RGB) 将用于实时预览。 FPS 低于您在 SurfaceView 上可以获得的,但可能是您可以获得的最好的。