Ich habe eine Anwendung, die eine Kameravorschau ausführt, einige grundlegende Bildverarbeitungsfunktionen für jeden Frame ausführt (z. B. Kantendetektion, Farbwechsel, Bildverzerrung usw.) und den modifizierten Frame auf dem Bildschirm in "Echtzeit" anzeigt. Ähnlich der App "Paper Camera" in Android Market.
Eine Zusammenfassung meines Ansatzes:
1: Erstellen Sie zwei überlappende Ansichten in einem Rahmenlayout:
Eine SurfaceView, die an Camera.setPreviewDisplay () übergeben wird. (Durch das Übergeben von null würde verhindert, dass die Kameravorschau auf einigen Geräten startet - opencv hat dies vor Android 4.0 getan?).
Eine Klasse namens "LiveView", die View erweitert und Camera.PreviewCallBack implementiert. Diese Ansicht empfängt Rahmen von der Kamera und zeigt den Rahmen nach der Modifikation an (z. B. Kantendetektion). Diese Ansicht befindet sich oben auf der SurfaceView.
2: Ich rufe Camera.setPreviewCallbackWithBuffer () auf, damit Frames an mein LiveView gesendet werden
3: Im onPreviewFrame () von LiveView nehme ich den aufgenommenen Frame (byte []), konvertiere von YUV nach RGB und führe Bildverarbeitungsfunktionen aus und rufe postInvalidate () auf (Die YUV2RGB-Konvertierung und das Bild) Verarbeitung erfolgt in nativem Code)
4: In der OnDraw () -Methode von LiveView erstelle ich eine Bitmap aus dem modifizierten RGB-Rahmen (byte []) und zeichne die Bitmap nach Canvas.
Das funktioniert (zwischen 5 fps und 10 fps auf verschiedenen Geräten), aber ich würde gerne hören, wie andere dieses Problem angegangen sind und wie es verbessert werden könnte. Insbesondere:
Vielen Dank
Ich habe auch so etwas gemacht. Was ich tue, ist die Kameraansicht zu erweitern. Ich glaube nicht, dass die Kameraansicht für jeden Frame aktualisiert wird, sondern abgerufen wird. Und nur die Ansicht, die Sie geändert haben, müsste aktualisiert werden.
OpenCv macht einen besseren Job als die native Kamera. Nach dem Importieren von org.opencv.highgui.VideoCapture
können Sie direkt auf die Kamera zugreifen mit:
um mGrayMat in mRgbaMat umzuwandeln: (org.opencv.imgproc.Imgproc)
%Vor%Tags und Links android image-processing android-camera real-time