Quellcode |
![]() ![]() ![]() |
Auf dieser Seite werden Quellcodes von erstellten Testprogrammen veröffentlicht.
Zur Ermittlung der Framerate und der Latenz der Kamera wurden einige
Testprogramme geschrieben und auf dem oDroid mit angeschlossener Kamera
durchgeführt. Wie die Tests im einzelnen Ablaufen ist der Seite Latenzzeitermittlung
nachzulesen, dort sind auch die Ergebnisse aufgelistet.
Die FPS der
Kamera wurde auf 3 Arten überprüft. Die erste Methode liest dabei einen
Richtwert, welcher vom Benutzer gesetzt wird, aus der Kamera per openCV aus.
Methode zwei Berechnet aus zwei Zeitwerten die Dauer einer einzelnen Aufnahme
und berechnet damit die FPS aus Momentanwerten. Methode drei ermittelt die Dauer
der Aufnahme für eine bestimmte Anzahl von Bildern und berechnet damit einen
Mittelwert für die FPS über eine längere Zeit.
Dieses Programm wurde
für die verschiedenen Anwendungen jeweils variiert. Der Quellcode ist im folgenden Block einsehbar:
/*
Name: camTest6.cpp
Programm erstllt von: Niko Dodt, Oliver Zeitz
In diesem Programm wird die oCam konfiguriert und die Framerate (FPS - Frames per Second) wird auf drei Arten ermittelt und in der Konsole dargestellt. Das Bild wird dabei jedoch nicht angezeigt.
FPS-Ermittlungsarten sind:
1) Auslesen der in der Kamera eingestellten FPS (Konstant)
2) Berechnen des Werts: FPS für jedes Bild neu berechnen (Aktueller Wert)
3) Berechnen des Werts: Anzahl der Bilder / Dauer der Aufnahme (Durchschnittswert)
Die Ergebnisse werden in der Konsole ausgegeben.
*/
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <sys/time.h>
using namespace cv;
using namespace std;
int main()
{
//Variablen:
struct timeval tval;
long countImg(0);
//Kamera initialisieren
VideoCapture cam1(0); // Kamera oeffnen
if(!cam1.isOpened()){cout<<"cant open cam";} //Errornachricht falls Kamera nicht angeschlossen ist
cam1.set(CV_CAP_PROP_FRAME_WIDTH, 1280); //Aufloesung der Kamera einstellen, Weite in Pixeln
cam1.set(CV_CAP_PROP_FRAME_HEIGHT,720); //Aufloesung der Kamera einstellen, Hoehe in Pixeln
cam1.set(CV_CAP_PROP_FPS, 30); //Framerate der Kamera einstellen, in Frames/sec
//Zeitmessung der Bildaufnahme starten
gettimeofday(&tval,NULL); //Startzeitpunkt in Sekunden und Microsekunden aufnehmen
double t1=tval.tv_sec+(tval.tv_usec/1000000.0);
//Aufnahmeschleife starten
//Es werden so lange Bilder aufgenommen, bis ein Bildlimit erreicht ist
while(true){
double t = (double)cv::getTickCount(); //FPS-Messung pro Bild starten
Mat camFrame; //In camFrame wird das derzeitig aufgenommene Bild zwischengespeichert
cam1.read(camFrame); //Frame einlesen und in camFrame speichern
countImg++; //Anzahl der aufgenommenen Bilder zaehlen
//namedWindow("camoo",WINDOW_NORMAL | WINDOW_AUTOSIZE);//Anzeigefenster erstellen / GUI
//imshow("camoo",camFrame); //Aufgenommenes Bild darstellen...
t = ((double)cv::getTickCount()- t) / cv::getTickFrequency(); //FPS-Messung pro Bild beenden und ausgeben
cout<<"Current FPS: "<<1.0 / t <<"\t"<<cam1.get(CV_CAP_PROP_FPS)<< endl;
if(countImg>=10000) //Abbruchkriterium der Aufnahmeschleife, hier bei 10000 Bildern
break;
}
gettimeofday(&tval,NULL); //Endzeitpunkt der Aufnahme speichern
double t2=tval.tv_sec+(tval.tv_usec/1000000.0); //Laufzeitberechnung der Schleife in sec
cout<<"\nGesetzte Aufloesung:\t"<<cam1.get(CV_CAP_PROP_FRAME_WIDTH)<<" x "<<cam1.get(CV_CAP_PROP_FRAME_HEIGHT)<<"\tPixel"<<endl;
cout<<"Anzahl der aufgenommenen Bilder: "<<countImg<<"\tDauer der Schleife in s: "<<t2-t1<<endl;
cout<<"FPS mean: "<<countImg/(t2-t1)<<endl; //Gemittelte FPS
cam1.release(); //Kamera wieder schliessen
return 0;
}
Die Ausgabe des Programms ist dann folgendermaßen aufgebaut:
Alle Messergebnisse können HIER aufgerufen werden.