我需要在Android上准备一个视觉系统示例 - 图像处理。有许多样本具有相机预览,例如。 Sample
问题是我无法访问图像,因此我可以处理图像或在相机捕获和预览之间绘制图像。
如何将预览导出到位图或任何可在单像素级别上处理的内容?如何将其导出回屏幕进行调试?
我尝试修改示例中的代码,将表面视图更改为位图并进行修改。不幸的是我不知道如何返回表面视图:
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阿森纳和Android开发者网站的例子 - 这个样本只是我发现的最简单的一个。
问候
答案 0 :(得分:0)
Android上支持的流程是实时预览与为您的图像处理提供像素的相机数据回调分开。
如果使用TextureSurface,则可以应用任何OpenGL着色器来操作实时预览,但这是有限的;可以将像素从OpenGL传递到CPU,但速度太慢,无法跟上可接受的实时预览FPS。
您可以使用OpenCV,并将图像处理代码放入onCameraFrame()
回调中。回调(RGB)的结果将用于实时预览。 FPS低于SurfaceView上的FPS,但可能是最好的。