Kamera-Übersicht
Die Qt Multimedia -API stellt eine Reihe von kamerabezogenen Klassen bereit, sodass Sie auf Bilder und Videos von Kameras mobiler Geräte oder Webkameras zugreifen können. Für gängige Aufgaben stehen sowohl C++- als auch QML-APIs zur Verfügung.
Kamerafunktionen
Um die Kameraklassen nutzen zu können, ist ein kurzer Überblick über die Funktionsweise einer Kamera erforderlich. Wenn Sie damit bereits vertraut sind, können Sie direkt zu den Details zur Kamera-Implementierung springen. Eine ausführlichere Erklärung der Funktionsweise einer Kamera finden Sie im folgenden YouTube-Clip.
Der Objektivaufbau
An einem Ende der Kameraeinheit befindet sich die Objektivbaugruppe (ein oder mehrere Objektive, die so angeordnet sind, dass sie das Licht auf den Sensor fokussieren). Die Objektive selbst lassen sich manchmal bewegen, um beispielsweise den Fokus und den Zoom einzustellen. Sie können aber auch fest angeordnet sein, um ein gutes Gleichgewicht zwischen Fokussierung und Kosten zu gewährleisten.

Manche Objektivbaugruppen lassen sich automatisch einstellen, sodass ein Objekt in unterschiedlichen Entfernungen zur Kamera scharfgestellt bleiben kann. Dies geschieht in der Regel, indem gemessen wird, wie scharf ein bestimmter Bereich des Bildausschnitts ist, und die Objektivbaugruppe anschließend so angepasst wird, dass die maximale Schärfe erreicht wird. In einigen Fällen verwendet die Kamera hierfür immer die Bildmitte. In anderen Fällen lässt sich der Zielfokusbereich bei einer Kamera auch festlegen. Einige Beispiele für diese Funktion sind:
- Gesichtszoom: Mithilfe von Computer Vision werden ein oder mehrere Gesichter erkannt und als Ziel verwendet.
- Touch-to-Zoom: Der Benutzer kann über den Vorschaubildschirm manuell einen Bereich auswählen.
Der Sensor
Sobald Licht auf den Sensor trifft, wird es in digitale Pixel umgewandelt. Dieser Vorgang kann von einer Reihe von Faktoren abhängen, lässt sich aber letztendlich auf zwei Aspekte zurückführen:
- Die Zeit, die für die Umwandlung zur Verfügung steht. Auch als Belichtungszeit bezeichnet.
- Wie hell das Licht ist.
Je länger die Umwandlung dauern darf, desto besser ist die resultierende Bildqualität. Der Einsatz eines Blitzes kann dazu beitragen, dass mehr Licht auf den Sensor trifft, wodurch dieser die Pixel schneller umwandeln kann und bei gleicher Belichtungszeit eine bessere Qualität erzielt wird. Umgekehrt ermöglicht eine längere Umwandlungszeit das Fotografieren in dunkleren Umgebungen, sofern die Kamera ruhig gehalten wird. Wenn sich die Kamera während der Aufnahme durch den Sensor bewegt, wird das resultierende Bild unscharf.
Bildverarbeitung
Nachdem das Bild vom Sensor erfasst wurde, führt die Kamera-Firmware verschiedene Bildverarbeitungsschritte durch, um unterschiedliche Sensoreigenschaften, die aktuellen Lichtverhältnisse und die gewünschten Bildeigenschaften auszugleichen. Schnellere Umwandlungszeiten der Sensorpixel können digitales Rauschen verursachen; daher kann je nach den Einstellungen des Kamerasensors eine gewisse Bildverarbeitung durchgeführt werden, um dieses Rauschen zu entfernen.
Auch die Farbe des Bildes kann in dieser Phase angepasst werden, um unterschiedliche Lichtquellen auszugleichen – Leuchtstofflampen und Sonnenlicht lassen dasselbe Objekt sehr unterschiedlich erscheinen, sodass das Bild anhand des Weißabgleichs (aufgrund der unterschiedlichen Farbtemperaturen der Lichtquellen) angepasst werden kann.

In dieser Phase können auch bestimmte „Spezialeffekte“ angewendet werden. So lassen sich beispielsweise Bilder im Schwarz-Weiß-, Sepia- oder „Negativ“-Stil erzeugen.
Aufzeichnung für die Nachwelt
Sobald schließlich ein perfekt fokussiertes, belichtetes und verarbeitetes Bild entstanden ist, kann es sinnvoll genutzt werden. Kamerabilder können durch Anwendungscode weiterverarbeitet werden (zum Beispiel zur Erkennung von Barcodes oder zum Zusammenfügen eines Panoramabildes), in einem gängigen Format wie JPEG gespeichert oder zur Erstellung eines Films verwendet werden. Für viele dieser Aufgaben stehen Klassen zur Unterstützung bereit.
Details zur Kamera-Implementierung
Erkennen und Auswählen einer Kamera
Bevor Sie die Kamera-APIs verwenden, sollten Sie überprüfen, ob zur Laufzeit eine Kamera verfügbar ist. Ist keine verfügbar, können Sie kamerabezogene Funktionen in Ihrer Anwendung deaktivieren. Um diese Überprüfung in C++ durchzuführen, verwenden Sie die Funktion ` QMediaDevices::videoInputs()`, wie im folgenden Beispiel gezeigt:
bool checkCameraAvailability()
{
return !QMediaDevices::videoInputs().isEmpty();
}Greifen Sie über die Klasse „ QCamera “ in C++ oder den Typ „ Camera “ in QML auf eine Kamera zu.
Wenn mehrere Kamerageräte verfügbar sind, können Sie festlegen, welches davon verwendet werden soll.
In C++:
const QList<QCameraDevice> cameras = QMediaDevices::videoInputs();
for (const QCameraDevice &cameraDevice : cameras) {
if (cameraDevice.description() == "mycamera")
camera = new QCamera(cameraDevice);
}In QML können Sie die Kamera auswählen, indem Sie die Eigenschaft „ Camera::cameraDevice “ festlegen. In C++ können Sie ein Kameragerät auch anhand seiner physischen Ausrichtung statt anhand der Kamerainformationen auswählen. Dies ist auf mobilen Geräten nützlich, die häufig über eine Front- und eine Rückkamera verfügen.
In C++:
camera = new QCamera(QCameraDevice::FrontFace);Wenn kein ` QCameraDevice ` angegeben ist, wird das Standardgerät verwendet. Das Standardgerät wird anhand der vom Betriebssystem bereitgestellten Informationen ausgewählt. Auf Desktop-Plattformen wird die Standardkamera in der Regel vom Endbenutzer in den Systemeinstellungen festgelegt. Auf einem mobilen Gerät ist in der Regel die rückseitige Kamera das Standardkamera-Gerät. Sie können das Standardkamera-Gerät in C++ mit ` QMediaDevices::defaultVideoInput()` oder in QML mit ` MediaDevices.defaultVideoInput ` abrufen.
Das Standardkameragerät kann sich im Laufe der Zeit ändern, z. B. wenn der Endbenutzer das aktuelle Standardkameragerät trennt. Anwendungsentwickler können diese Änderung verfolgen, indem sie das Standardkameragerät erneut abfragen, sobald das Signal „ QMediaDevices::videoInputsChanged “ ausgelöst wird.
Vorschau
Auch wenn dies nicht unbedingt erforderlich ist, ist es oft hilfreich, sehen zu können, worauf die Kamera gerichtet ist. Dies wird als Vorschau bezeichnet.
Je nachdem, ob Sie QML oder C++ verwenden, gibt es dafür mehrere Möglichkeiten. In QML können Sie „ Camera “ und „videoOutput“ gemeinsam nutzen, um eine „captureSession“ zu überwachen.
Item {
VideoOutput {
id: output
anchors.fill: parent
}
CaptureSession {
videoOutput: output
Camera {
// You can adjust various settings in here
}
}
}In C++ hängt Ihre Wahl davon ab, ob Sie Widgets oder „ QGraphicsView “ verwenden. Im Fall der Widgets wird die Klasse „ QVideoWidget “ verwendet, und „ QGraphicsVideoItem “ ist für „ QGraphicsView “ nützlich.
QMediaCaptureSession captureSession;
camera = new QCamera;
captureSession.setCamera(camera);
viewfinder = new QVideoWidget;
captureSession.setVideoOutput(viewfinder);
viewfinder->show();
camera->start(); // to start the cameraFür fortgeschrittene Anwendungen (wie die Verarbeitung von Vorschaubildern in Echtzeit, was die Erkennung von Objekten oder Mustern ermöglicht) kannst du auch eine eigene ` QVideoSink ` verwenden und diese als `videoOutput` für die ` QMediaCaptureSession` festlegen. In diesem Fall musst du das Vorschaubild selbst rendern, indem du die vom Signal `videoFrameChanged()` empfangenen Daten verarbeitest.
QMediaCaptureSession captureSession;
camera = new QCamera;
captureSession.setCamera(camera);
mySink = new QVideoSink;
captureSession.setVideoOutput(mySink);
camera->start();
// MyVideoSink::setVideoFrame(..) will be called with video framesAuf Mobilgeräten ist das Vorschaubild standardmäßig genauso ausgerichtet wie das Gerät. Wenn der Benutzer das Gerät dreht, wechselt das Vorschaubild daher zwischen Hoch- und Querformat. Sobald Sie mit der Aufnahme beginnen, wird die Ausrichtung gesperrt. Um eine schlechte Benutzererfahrung zu vermeiden, sollten Sie während der Aufnahme auch die Ausrichtung der Benutzeroberfläche der Anwendung sperren. Dies können Sie mithilfe der Eigenschaft „ contentOrientation “ von „ QWindow “ erreichen.
Standbilder
Nachdem Sie einen Sucher eingerichtet und ein fotogenes Motiv gefunden haben, müssen Sie zur Aufnahme eines Bildes ein neues ` QImageCapture `-Objekt initialisieren. Anschließend müssen Sie nur noch die Kamera starten und das Bild aufnehmen.
QMediaCaptureSession captureSession;
camera = new QCamera;
captureSession.setCamera(camera);
imageCapture = new QImageCapture;
captureSession.setImageCapture(imageCapture);
camera->start(); // Viewfinder frames start flowing
// on shutter button pressed
imageCapture->capture();Videos
Zuvor haben wir Code gesehen, mit dem sich ein Standbild aufnehmen ließ. Für die Videoaufnahme ist die Verwendung eines „ QMediaRecorder “-Objekts erforderlich.
Um ein Video aufzunehmen, müssen wir wie zuvor ein Kameraobjekt erstellen, doch dieses Mal werden wir nicht nur einen Sucher erstellen, sondern auch ein Medienaufzeichnungsobjekt initialisieren.
QMediaCaptureSession captureSession;
camera = new QCamera;
captureSession.setCamera(camera);
recorder = new QMediaRecorder;
captureSession.setRecorder(recorder);
camera->start();
// setup output format for the recorder
QMediaFormat format(QMediaFormat::MPEG4);
format.setVideoCodec(QMediaFormat::VideoCodec::H264);
format.setAudioCodec(QMediaFormat::AudioCodec::MP3);
recorder->setMediaFormat(format);
// on shutter button pressed
recorder->record();
// sometime later, or on another press
recorder->stop();Signale des ` QMediaRecorder` können mit Slots verknüpft werden, um auf Änderungen im Status des Kodierungsprozesses oder auf Fehlerereignisse zu reagieren. Die Aufnahme beginnt, wenn ` QMediaRecorder::record()` aufgerufen wird. Dadurch wird das Signal ` recorderStateChanged()` ausgelöst. Die Aufnahme wird über die Slots `record()`, `stop()` und `pause()` von ` QMediaRecorder` gesteuert.
Steuerung der Bildverarbeitungspipeline
Nachdem nun die Grundlagen der Bild- und Filmaufnahme behandelt wurden, gibt es eine Reihe von Möglichkeiten, die Bildverarbeitungs-Pipeline zu steuern, um einige interessante Techniken zu implementieren. Wie bereits erläutert, bestimmen mehrere physikalische und elektronische Elemente gemeinsam die endgültigen Bilder, und Sie können diese mit verschiedenen Klassen steuern.
Fokus und Zoom
QCamera ermöglicht es Ihnen, die allgemeine Fokussierungsstrategie mithilfe der Enums für „ FocusMode “ festzulegen. „ FocusMode “ befasst sich mit Einstellungen wie „ QCamera::FocusModeAuto “ und „ QCamera::FocusModeInfinity “.
Bei Kamerahardware, die dies unterstützt, ermöglicht „ QCamera::FocusModeAutoNear “ die Abbildung von Objekten, die sich nahe am Sensor befinden. Dies ist nützlich in Anwendungen wie der Barcode-Erkennung oder dem Scannen von Visitenkarten.
Zusätzlich zur Fokussierung können Sie mit „ QCamera “ alle verfügbaren Zoomfunktionen über „ setZoomFactor()“ oder „ zoomTo()“ steuern. Der verfügbare Zoombereich kann eingeschränkt oder vollständig auf den Faktor 1 (1:1) festgelegt sein. Der zulässige Bereich lässt sich mit „ minimumZoomFactor()“ und „ maximumZoomFactor()“ abfragen.
Belichtung, Verschlusszeit und Blitz
Es gibt eine Reihe von Einstellungen, die die Lichtmenge beeinflussen, die auf den Kamerasensor trifft, und damit die Qualität des resultierenden Bildes.
Die wichtigsten Einstellungen für die automatische Bildaufnahme sind die Belichtungsautomatik ( exposure mode ) und der Belichtungsbereich ( flash mode). Einige weitere Einstellungen (wie z. B. die ISO-Einstellung und die Belichtungszeit) werden in der Regel automatisch geregelt, können aber bei Bedarf auch manuell geändert werden.
Schließlich können Sie mit dieser Klasse die Blitzhardware (sofern vorhanden) steuern. In einigen Fällen kann die Hardware auch als Taschenlampe dienen.
Bildverarbeitung
Mit der Klasse „ QCamera “ können Sie den Bildverarbeitungsteil der Pipeline anpassen. Zu diesen Einstellungen gehören:
- white balance (auch als Farbtemperatur bezeichnet)
Die meisten Kameras unterstützen automatische Einstellungen für all diese Parameter, sodass Sie diese normalerweise nicht anpassen müssen, es sei denn, der Benutzer wünscht eine bestimmte Einstellung.
Beispiele
Es stehen sowohl C++- als auch QML-Beispiele zur Verfügung.
C++-Beispiele
Zeigt, wie man ein Standbild aufnimmt oder ein Video aufzeichnet. |
QML-Beispiele
Diese auf „ Qt Quick “ basierende Anwendung zeigt, wie man mithilfe der API ein Standbild oder ein Video aufnimmt. | |
Audio- und Videoaufnahmen mit „ Qt Quick “. |
Referenzdokumentation
C++-Klassen
Schnittstelle für Systemkamerageräte | |
Allgemeine Informationen zu Kamerageräten | |
Beschreibt ein von einem Kameragerät unterstütztes Videoformat | |
Wird für die Aufzeichnung von Medieninhalten verwendet |
QML-Typen
Eine Schnittstelle für Kameraeinstellungen in Bezug auf Fokus und Zoom | |
Eine Schnittstelle zur Aufnahme von Kamerabildern |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.