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

Ale*_*nov 2 camera android frame-rate

我的目标是尽可能提高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)

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

Jaa*_*a-c 5

首先,使用setPreviewCallbackWithBuffer(),它重用一个缓冲区,而不必在每个帧上分配新的缓冲区.检查我的旧答案,有一个例子如何使用它.

在onPreviewFrame()中,不要做任何昂贵的操作,数据的时间有限,它会在每个新帧上重写.你应该在另一个线程中进行处理.

当然,不要在每个帧上创建一个颜色数组的新位图,只做一次.