相关疑难解决方法(0)

Android:如何使用回调显示相机预览?

我需要做的很简单,我想使用相机回调手动显示来自相机的预览,我想在真实设备上获得至少15fps.我甚至不需要颜色,我只需要预览灰度图像.来自相机的图像是YUV格式,你必须以某种方式处理它,这是主要的性能问题.我正在使用API​​ 8.

在所有情况下,我都使用camera.setPreviewCallbackWithBuffer(),它比camera.setPreviewCallback()更快.如果我没有显示预览,我似乎无法在这里获得大约24 fps.所以没有问题.

我试过这些解决方案:

1.在SurfaceView上将相机预览显示为位图.它有效,但性能约为6fps.

baos = new ByteOutputStream();
yuvimage=new YuvImage(cameraFrame, ImageFormat.NV21, prevX, prevY, null);

yuvimage.compressToJpeg(new Rect(0, 0, prevX, prevY), 80, baos);
jdata = baos.toByteArray();

bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length); // Convert to Bitmap, this is the main issue, it takes a lot of time

canvas.drawBitmap(bmp , 0, 0, paint);
Run Code Online (Sandbox Code Playgroud)


2.在GLSurfaceView上将相机预览显示为纹理.这里我只显示亮度数据(灰度图像),这非常简单,每帧只需要一个arraycopy().我可以得到大约12fps,但我需要在预览中应用一些过滤器,看起来,它无法在OpenGL ES 1中快速完成.所以我不能使用这个解决方案.另一个问题中的一些细节.


3.使用NDK在(GL)SurfaceView上显示相机预览以处理YUV数据.我在这里找到了一个使用一些C函数和NDK 的解决方案.但我没有设法使用它,这里有更多细节.但无论如何,这个解决方案是为了返回ByteBuffer在OpenGL中将其显示为纹理,并且它不会比之前的尝试更快.所以我必须修改它以返回int []数组,可以使用canvas.drawBitmap()绘制,但我不理解C足以执行此操作.


那么,我有没有其他方法可以避免或尝试一些改进?

java camera android preview android-camera

14
推荐指数
2
解决办法
2万
查看次数

使用Android相机创建色度键效果的第一步

我想用android相机创建一个色度键效果.我不需要一步一步,但我想知道劫持Android相机并应用过滤器的最佳方法.我已经检查了API,并没有找到任何关于如何操纵来自相机的数据的超级权威.起初我研究过使用表面纹理,但我不完全清楚它是如何帮助或如何使用它.然后我使用GLSurfaceView检查,这可能是正确的方向,但不是很确定.

另外,要添加到我的问题,我将如何处理图像的预览和保存?我会以最少两次处理图像吗?一次预览和一次保存?我认为这可能是最好的解决方案.

最后,创建一个C/++包装器来处理优化速度的处理是否有意义?

任何帮助都将非常感激.一些例子的链接也将非常感激.

谢谢.

android opengl-es image-processing android-camera opengl-es-2.0

5
推荐指数
1
解决办法
6776
查看次数

如何在Android中提高效率?

我有这段代码CameraPreview从a 获取a的位图TextureView并将其呈现在a上ImageView.

public void onSurfaceTextureUpdated(SurfaceTexture surface) {
    // Invoked every time there's a new Camera preview frame

    bmp = mTextureView.getBitmap();
    bmp2 = bmp.copy(bmp.getConfig(),true);

    for(int x=0;x<bmp.getWidth();x++){
        for(int y=0;y<bmp.getHeight();y++){
            //Log.i("Pixel RGB (Int)", Integer.toString(bmp.getPixel(x,y)));
            if(bmp.getPixel(x,y) < -8388608){
                bmp2.setPixel(x,y,Color.WHITE);
            }else{
                bmp2.setPixel(x,y,Color.BLACK);
            }
        }
    }

    mImageView.setImageBitmap(bmp2);
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我将在相机显示的任何内容上应用实时图像处理.现在它只是背面和白色像素.它现在有点慢,位图的宽度和高度只有~250像素.

这是推荐的做法吗?

android

5
推荐指数
1
解决办法
122
查看次数

如何在Android中的camera 2 API中添加实时过滤效果

我在android中开发相机应用程序,我想在我的应用程序中启用实时过滤效果功能,我已经使用GPUimage过滤器为图像添加过滤效果.但我不知道如何启用实时过滤效果拍照前的相机预览.我已经使用相机和相机2 api下面的棒棒糖版本和棒棒糖版本.任何图书馆可用于此?我是初学者,任何人都可以帮忙吗?

android android-camera android-gpuimageview

5
推荐指数
1
解决办法
5298
查看次数

为实时计算机视觉处理获得高FPS的方法

我的目标是尽可能提高FPS.我会很满意BW小帧,但FPS应该是最大的. getSupportedPreviewFpsRange在HTC WildFire S上返回(9,30).但是当我尝试用最简单的处理绘制预览图像时,它在视觉上最大可达到12-15 FPS.设置参数和startPreview()方法调用后,我这样做:

camera.setPreviewCallback(new Camera.PreviewCallback() {
          @Override
          public void onPreviewFrame(byte[] bytes, Camera camera) {
            Bitmap bitmap = Bitmap.createBitmap(size.width, size.height, Bitmap.Config.ARGB_8888);
            int[] colors = new int[size.width * size.height];
            for (int i=0; i < colors.length; i++){
              colors[i] = getBWColor(bytes[i]);
            }
            bitmap.setPixels(colors, 0, size.width, 0, 0, size.width, size.height);
            secondView.setImageBitmap(bitmap);
          }
        });
      }

private static int getBWColor(byte b){
    int res = 255;
    for(int i=0;i<3;i++){
      res = (res << 8) + b;
    }
    return res;
  }
Run Code Online (Sandbox Code Playgroud)

有没有办法尽可能快地得到它?=(

camera android frame-rate

2
推荐指数
1
解决办法
2702
查看次数