2017-02-07 2 views
2

Ich baue ein Bildbearbeitungsprogramm mit Android Kamera2. Da das Bildformat jedes aufgenommenen Bildes YUV_420_888 ist, muss es für die Bildverarbeitung effizient in RGB umgewandelt werden. Ich habe viel gegoogelt und gelesen (besonders die folgenden zwei Links) und schließlich herausgefunden, dass das Renderscript die Lösung sein kann. Ich weiß jedoch nicht, wie ich das Skript yuv2rgb in meinem Code verwenden soll.Wie transformiert man jeden YUV_420_888-Rahmen effizient in RGB (z. B. mit psrtscript yuv2rgb.rs) in Android camera2?

http://werner-dittmann.blogspot.jp/2016/03/using-android-renderscript-to-convert.html

Convert android.media.Image (YUV_420_888) to Bitmap

Derzeit verwende ich die TextureView Oberfläche, um die Vorschau zu zeigen, und verwenden Sie Imagereader jeden YUV_420_888 Rahmen in onImageAvailable Funktion zu erfassen.

protected void createCameraPreview() { 
    try { 
     SurfaceTexture texture = textureView.getSurfaceTexture(); 
     assert texture != null; 
     texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight()); 
     Surface surface = new Surface(texture); 
     Surface mImageSurface = mImageReader.getSurface(); 
     captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     captureRequestBuilder.addTarget(surface) 
     List surfaces = new ArrayList<>(); 
     surfaces.add(surface); 
     surfaces.add(mImageSurface); 
     captureRequestBuilder.addTarget(mImageSurface); 
    cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler); 

     cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback(){ 
        @Override 
        public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 
         //The camera is already closed 
         if (null == cameraDevice) { 
          return; 
         } 
         // When the session is ready, we start displaying the preview. 
         cameraCaptureSessions = cameraCaptureSession; 
         updatePreview(); 
        } 
        @Override 
        public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 
         Toast.makeText(MainActivity.this, "Configuration change", Toast.LENGTH_SHORT).show(); 
        } 
       }, null); 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
} 


    private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { 
    @Override 
    public void onImageAvailable(ImageReader reader) { 
     Image img = null; 
     img = reader.acquireNextImage(); // we got YUV_420_888 frame here 
     // transform to RGB format here? 
     // image processing 
    } 
}; 

Wie meine Codes zu aktualisieren, das Ziel zu erreichen (zum Beispiel der yuv2rgb.rs verwendet wird)? Vielen Dank.

Antwort

2

Die Anwendung HdrViewfinder camera2 Probe, die verwendet render etwas Bildverarbeitung zu tun, für hilfreich sein kann, wie die Kamera und renderanzuschließen: https://github.com/googlesamples/android-HdrViewfinder

Es tut nicht YUV-> RGB-Konvertierung, IIRC, und ich denke, dass yuv2rgb.rs für einen anderen YUV-Farbraum gedacht ist als das, was die Kamera produziert (aus Gründen der Rückwärtskompatibilität - sie existierte vor Kamera2). Aber es bringt Sie zu dem Punkt, wo Sie Ihr eigenes RS-Skript schreiben können, um es auf Kameradaten anzuwenden.

+0

Danke. Eddy. Ich verwende den Code von folgendem Link. http://stackoverflow.com/questions/36212904/yuv-420-888-interpretation-on-samsung-galaxy-s7-camera2. Ich teste es immer noch. Wird bald die Antwort liefern. –

Verwandte Themen