2016-09-14 8 views
1

質問

は私がCamera2Basicサンプルで行われているものに似た何かをしたい、それは次のようになります。TextureViewを使ってカメラから画像のプレビュープレビューするために使用するカメラ2とProcessカメラデータ

  1. ImageReader
0を使用してカメラから画像を処理します私が処理されるべき画像からグレーのチャンネル(明るさ)にのみ興味

  • 2に関するいくつかの違いで

    。それらのサイズは約1000 x 1000ピクセルでなければなりません(最高解像度ではありません)

  • 処理するイメージが利用可能な場合、イメージをディスクに保存する代わりに汎用process(Image)メソッドが呼び出されます。何このメソッドが行うことは、この質問の範囲外であるが、それは
  • 画像データは(10 FPSを中心に、しかし速度は重要ではない)を定期的に処理しなければならないを返すために約50ミリ秒かかり代わりに、最終的に

Camera2 APIを使用してこれを行うにはどうすればよいですか?

観察

  • Iは小さい寸法と異なるフォーマット(YUV_420_888代わりにJPEG)を選択し、IはImageReaderインスタンスを作成しています方法を変更しました。輝度データを取得するために、Yプレーンにアクセスします。より効率的なフォーマットがありますか(私は単にUV飛行機を無視しているので)?
  • TextureViewImageReaderの両方のサーフェスは、定期的に塗りつぶす必要がありますが、速度は異なります。 setRepeatingRequest()を呼び出してCameraRequest(これはsetRepeatingRequest()を呼び出して設定することができます)を繰り返すことができるので、手動でcapture()を呼び出してください(たとえば、setRepeatingRequest()にプレビューリクエストをして、capture()を定期的に呼び出してください)。
  • 再処理された要求を送信してプレビュー画像から処理対象の画像を取得することで、パフォーマンスを改善できますか?もしそうなら、どうしたらいいですか?

答えて

1

灰色のチャンネルを手助けする方法がわからないので、YUV形式の画像の面を調べてそこから取得しようとすることをお勧めします。

また、CaptureBuilderで設定できるすべての値をチェックしてみてください。おそらく、SENSOR_TEST_PATTERN_MODE、COLOR_CORRECTION_MODE、またはBLACK_LEVEL_LOCKを使用して、目立たせることができます。あなただけの単純なを使用して、工程()メソッド内のフレームを破棄し、プロセスについてandroid documentation

内のすべての情報ごとに10のフレームの一つだけを確認することができます。

if (result.getFrameNumber() % 10 != 0) return; 

は、最後にそのすべての画像を閉じることを忘れないでくださいあなたはメモリリークを避けるために、あなたのパフォーマンスを向上させるためにあなたのImageReader OnImageAvailableListenerで受け取る:P

@Override 
    public void onImageAvailable(ImageReader imageReader) { 
     Image image = null; 
     try { 
      image = imageReader.acquireNextImage(); 
      //Do whatever you want with your Image 
      if (image != null) { 
       image.close(); 
      } 
     } catch (IllegalStateException iae) { 
      if (image != null) { 
       image.close(); 
      } 
     } 
    } 

は、それは私が何か他のものであなたを助けることができるなら、私に知らせて、あなたを助けることを願っています!

関連する問題