8 #include <QApplication> 9 #include <QDesktopWidget> 10 #include <QMediaRecorder> 12 Camera::Camera(
Rov *rov,
int numero,
int choixResolution): rov(rov), numero(numero), largeur(
LARGEUR_DEFAUT), hauteur(
HAUTEUR_DEFAUT), luminosite(
SEUIL_DEFAUT), contraste(
SEUIL_DEFAUT), saturation(
SEUIL_DEFAUT), changementProprietes(false), choixResolution(choixResolution)
14 #if CV_VERSION_MAJOR == 3 15 qDebug() << Q_FUNC_INFO <<
"OpenCV" << CV_VERSION_MAJOR << CV_VERSION_MINOR;
17 qDebug() << Q_FUNC_INFO <<
"OpenCV" << CV_MAJOR_VERSION << CV_MINOR_VERSION;
24 if(choixResolution == -1)
28 qDebug() << Q_FUNC_INFO <<
this;
29 qDebug() << Q_FUNC_INFO <<
"numero" << numero <<
"nomCamera" <<
nomCamera;
30 qDebug() << Q_FUNC_INFO <<
"largeur" <<
largeur <<
"hauteur" <<
hauteur;
34 Camera::Camera(
Rov *
rov, QString
nomCamera,
int choixResolution): rov(rov), nomCamera(nomCamera),
largeur(
LARGEUR_DEFAUT),
hauteur(
HAUTEUR_DEFAUT),
luminosite(
SEUIL_DEFAUT),
contraste(
SEUIL_DEFAUT),
saturation(
SEUIL_DEFAUT),
changementProprietes(false), choixResolution(choixResolution)
36 #if CV_VERSION_MAJOR == 3 37 qDebug() << Q_FUNC_INFO <<
"OpenCV" << CV_VERSION_MAJOR << CV_VERSION_MINOR;
39 qDebug() << Q_FUNC_INFO <<
"OpenCV" << CV_MAJOR_VERSION << CV_MINOR_VERSION;
47 if(choixResolution == -1)
52 qDebug() << Q_FUNC_INFO <<
this;
53 qDebug() << Q_FUNC_INFO <<
"numero" <<
numero <<
"nomCamera" <<
nomCamera;
54 qDebug() << Q_FUNC_INFO <<
"largeur" <<
largeur <<
"hauteur" <<
hauteur;
60 qDebug() << Q_FUNC_INFO <<
this;
70 qDebug() << Q_FUNC_INFO <<
"start" <<
"numero" <<
numero <<
"nomCamera" <<
nomCamera;
71 this->setPriority(QThread::NormalPriority);
75 qDebug() << Q_FUNC_INFO <<
"Erreur numero" <<
numero <<
"nomCamera" <<
nomCamera;
79 cv::VideoCapture camera(
numero);
84 while(camera.isOpened() && !isInterruptionRequested())
90 QPixmap pixmap = QPixmap::fromImage(QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped());
98 qDebug() << Q_FUNC_INFO <<
"stop" <<
"numero" <<
numero <<
"nomCamera" <<
nomCamera;
110 qDebug() << Q_FUNC_INFO <<
"largeur" <<
largeur <<
"hauteur" <<
hauteur;
111 camera.set(CV_CAP_PROP_FRAME_WIDTH,
largeur);
112 camera.set(CV_CAP_PROP_FRAME_HEIGHT, hauteur);
115 camera.set(CV_CAP_PROP_BRIGHTNESS,
luminosite);
116 camera.set(CV_CAP_PROP_CONTRAST,
contraste);
117 camera.set(CV_CAP_PROP_SATURATION, saturation);
136 QCameraInfo cameraInfo(
nomCamera.toLatin1());
143 QCameraInfo cameraInfo(nom.toLatin1());
149 QCameraInfo cameraInfo(nomCamera.toLatin1());
155 #ifndef SANS_DETECTION 157 if(QCameraInfo::availableCameras().count() > 0)
159 QCamera *camera =
new QCamera(cameraInfo,
this);
160 QMediaRecorder *mediaRecorder =
new QMediaRecorder(camera,
this);
162 qDebug() << Q_FUNC_INFO <<
this << mediaRecorder->supportedResolutions().size();
163 if(mediaRecorder->supportedResolutions().size() > 0)
165 foreach (
const QSize &resolution, mediaRecorder->supportedResolutions())
167 qDebug() << Q_FUNC_INFO << resolution.width() <<
"x" << resolution.height();
171 delete mediaRecorder;
175 Q_UNUSED(cameraInfo);
189 qDebug() << Q_FUNC_INFO <<
"largeur" << largeur <<
"hauteur" <<
hauteur;
190 QSize size(largeur, hauteur);
203 this->largeur = size.width();
204 this->hauteur = size.height();
207 qDebug() << Q_FUNC_INFO <<
"largeur" << this->largeur <<
"hauteur" << this->hauteur <<
"choixResolution" <<
choixResolution;
212 qDebug() << Q_FUNC_INFO <<
"largeur" << resolution.width() <<
"hauteur" << resolution.height();
217 this->
largeur = resolution.width();
218 this->
hauteur = resolution.height();
234 qDebug() << Q_FUNC_INFO <<
"choix" << choix;
255 this->luminosite = double(luminosite)/100;
261 this->contraste = double(contraste)/100;
267 this->saturation = double(saturation)/100;
273 qDebug() << Q_FUNC_INFO <<
"Caméra(s) disponible(s)" << QCameraInfo::availableCameras().count();
274 return QCameraInfo::availableCameras().count();
280 QString video =
"/dev/video";
282 if(nomCamera.contains(video))
284 QString n = nomCamera.mid(video.length(), nomCamera.length());
286 qDebug() << Q_FUNC_INFO <<
"nom" << nomCamera <<
"n" << nomCamera.right(nomCamera.indexOf(
"/dev/video")) <<
"index" << nomCamera.indexOf(
"/dev/video");
287 numero = n.toInt(&ok);
300 nom = QString(
"/dev/video") + QString::number(numero);
307 QList<QSize> listeResolutions;
308 listeResolutions.clear();
309 if(QCameraInfo::availableCameras().count() > 0)
311 QCamera *camera =
new QCamera(cameraInfo);
312 QMediaRecorder *mediaRecorder =
new QMediaRecorder(camera);
314 qDebug() << Q_FUNC_INFO << mediaRecorder->supportedResolutions().size();
315 if(mediaRecorder->supportedResolutions().size() > 0)
317 foreach (
const QSize &resolution, mediaRecorder->supportedResolutions())
319 qDebug() << Q_FUNC_INFO << resolution.width() <<
"x" << resolution.height();
320 listeResolutions.push_back(resolution);
323 delete mediaRecorder;
326 return listeResolutions;
Camera(Rov *rov, int numero, int choixResolution=-1)
Constructeur de la classe Camera.
QString getNom() const
Retourne le nom de la caméra.
int numero
Attribut contenant le numéro de la caméra sélectionnée.
void acquerirImageVideo(cv::VideoCapture &camera, cv::Mat &frame)
Fait l'acquisition d'une nouvelle frame.
int getChoixResolution()
Récupère le choix de la resolution active.
static int extraireNumero(QString nomCamera)
Retourne le numéro de caméra associé a son nom.
void nouvelleImage(QPixmap image)
Envoie un signal lorsque une nouvelle image du flux vidéo est disponible.
QList< QSize > getListeResolutionsCamera()
Retourne la liste des résolutions supportées par la caméra.
QList< QSize > listeResolutionsCamera
Liste contenant les résolutions supportés par la caméra.
Fichier qui contient la déclaration de la classe Camera.
QString nomCamera
Attribut contenant le nom de la caméra sélectionnée.
#define SEUIL_DEFAUT
Défini le seuil du contraste, luminosite et saturation de la caméra par défaut.
void setResolution(int largeur, int hauteur)
Modifie la résolution (largeur x hauteur)
double luminosite
Attribut contenant la luminosite de la vidéo.
void setProprietes(cv::VideoCapture &camera)
Après l'acquisition d'une nouvelle frame modifie les propriété de la caméra si ceux-ci ont été modifi...
void setContraste(int contraste)
Modifie le contraste de la caméra.
Classe controlant tout les traitements en provenance et en direction de la communication avec le rov...
int choixResolution
Choix dans la liste contenant les résolutions supportés par la caméra.
void run()
Démarre une nouveau thread afin de capturer le flux video et l'envoyer à l'IHM.
#define HAUTEUR_DEFAUT
Défini la hauteur en pixel de la caméra par défaut.
void setSaturation(int saturation)
Modifie la saturation de la caméra.
bool changementProprietes
Attribut désignant si une propriete de la caméra doit être modifiée.
static QList< QSize > lireListeResolutionsCamera(QCameraInfo &cameraInfo)
Retourne la liste des résolutions supportés par la caméra passé en parametre.
void setLuminosite(int luminosite)
Modifie la luminosite de la caméra.
double contraste
Attribut contenant le constraste de la vidéo.
QSize getResolution()
Récupère la resolution active.
#define LARGEUR_DEFAUT
Défini la largeur en pixel de la caméra par défaut.
void finVideo()
Envoie un signal lorsque la vidéo est interrompu.
int hauteur
Attribut contenant la hauteur (heigth) en pixels de la vidéo.
int largeur
Attribut contenant la largeur (width) en pixels de la vidéo.
~Camera()
Destructeur de la classe Camera.
void recupererListeResolutionsCamera()
Récupère la liste des résolutions supportées par la caméra sélectionnée.
static int getNbCameras()
Retourne le nombre de caméras connectés.
static QString creerNomCamera(int numero)
Retourne le nom de caméra associé a son numéro.
double saturation
Attribut contenant la saturation de la vidéo.
Rov * rov
Objet rov permettant de récuperer les dernière mesures issues des capteurs.