Projet Imposé V3.1.2
Suivre une coleur via OpenCV
Chargement...
Recherche...
Aucune correspondance
Référence du fichier /Users/vasilisskarleas/Library/Mobile Documents/com~apple~CloudDocs/Documents/University Sorbonne/3rd year/S6/c-project-rob-3-eleves-gr-2-1/Impose/main.cpp
#include <iostream>
#include <fstream>
#include <cmath>
#include "opencv2/highgui.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <unistd.h>
Graphe des dépendances par inclusion de main.cpp:

Macros

#define _USE_MATH_DEFINES
 
#define ROI_SIZE   450
 
#define MIN_RED_PIXELS   2000
 
#define MOVEMENT_THRESHOLD   10
 
#define TIME_THRESHOLD   0.189
 
#define SEUIL   30
 

Fonctions

void delay (float seconds)
 Fonction de temporisation.
 
void process_image (const cv::Mat &inputImage, cv::Mat &binaryImage)
 Filtre l'image via la méthode HSV (Hue Saturation Value)
 
std::pair< int, int > find_image_center (const cv::Mat &binary_image)
 Trouver le centre de la plage de couleur.
 
float calculate_diameter (int counter)
 Calcule le diamètre de l'objet (version vectorisée même si ce n'est pas un cercle).
 
void draw_circle (cv::Mat &image, const std::pair< int, int > &center, int diameter)
 Dessine un cercle de suivi sur le flux vidéo en direct.
 
bool in_dead_zone (int min, int max, const std::pair< int, int > &center)
 Vérifie si un point est dans la zone morte.
 
void send_coordinates (int x, int y)
 Envoie les coordonnées au port série.
 
int main (int argc, char **argv)
 Fonction principale qui ouvre la caméra, positionne les servomoteurs par défaut et traite chaque image capturée.
 

Variables

unsigned int microsecond = 1000000
 
std::pair< int, int > prev_center = {0, 0}
 
int time_id = 1
 

Documentation des macros

◆ _USE_MATH_DEFINES

#define _USE_MATH_DEFINES

Bibliothèques C++ intégrées Bibliothèques OpenCV intégrées Bibliothèques C intégrées

◆ MIN_RED_PIXELS

#define MIN_RED_PIXELS   2000

◆ MOVEMENT_THRESHOLD

#define MOVEMENT_THRESHOLD   10

◆ ROI_SIZE

#define ROI_SIZE   450

◆ SEUIL

#define SEUIL   30

◆ TIME_THRESHOLD

#define TIME_THRESHOLD   0.189

Documentation des fonctions

◆ calculate_diameter()

float calculate_diameter ( int counter)

Calcule le diamètre de l'objet (version vectorisée même si ce n'est pas un cercle).

Cette fonction calcule le diamètre approximatif d'un objet en utilisant la formule du diamètre d'un cercle.

Paramètres
counterNombre de pixels représentant l'objet.
Renvoie
Diamètre approximatif de l'objet.

◆ delay()

void delay ( float seconds)

Fonction de temporisation.

Cette fonction met en pause l'exécution du programme pendant un certain nombre de secondes.

Paramètres
secondsNombre de secondes de pause

◆ draw_circle()

void draw_circle ( cv::Mat & image,
const std::pair< int, int > & center,
int diameter )

Dessine un cercle de suivi sur le flux vidéo en direct.

Cette fonction dessine un point de suivi au centre de l'objet détecté et un cercle représentant le diamètre de l'objet.

Paramètres
imageImage sur laquelle dessiner.
centerCoordonnées du centre de l'objet.
diameterDiamètre de l'objet.

◆ find_image_center()

std::pair< int, int > find_image_center ( const cv::Mat & binary_image)

Trouver le centre de la plage de couleur.

Cette fonction trouve le centre des pixels blancs (valeur 255) dans une image binaire.

Paramètres
binary_imageImage binaire contenant des pixels blancs
Renvoie
std::pair<int, int> Coordonnées (x, y) du centre des pixels blancs

◆ in_dead_zone()

bool in_dead_zone ( int min,
int max,
const std::pair< int, int > & center )

Vérifie si un point est dans la zone morte.

Cette fonction vérifie si le centre de l'objet est dans la zone morte définie par les valeurs min et max.

Paramètres
minValeur minimale de la zone morte.
maxValeur maximale de la zone morte.
centerCoordonnées du centre de l'objet.
Renvoie
Vrai si le centre est dans la zone morte, faux sinon.

◆ main()

int main ( int argc,
char ** argv )

Fonction principale qui ouvre la caméra, positionne les servomoteurs par défaut et traite chaque image capturée.

Cette fonction utilise le flux vidéo en direct pour capturer des images, détecter les objets rouges, et envoyer les coordonnées pour contrôler les servomoteurs en fonction de la position de l'objet détecté.

Paramètres
argcNombre d'arguments.
argvTableau d'arguments.
Renvoie
Code de retour.

Besoin d'utiliser le flux vidéo en direct et d'effectuer des captures d'images pour le traitement (remplacez 0 par l'index de votre caméra si nécessaire)

Création des images pour le flux de traitement et initialisations

Capture d'une image depuis la caméra

Déclaration de la région d'intérêt (ROI)

Traitement de l'image

Seuil

Mise à jour du délai

Envoi des coordonnées à Arduino

Flux vidéo en temps réel utilisé pour les tests

Sur n'importe quel flux vidéo, appuyez sur n'importe quelle touche pour quitter et fermer le programme

◆ process_image()

void process_image ( const cv::Mat & inputImage,
cv::Mat & binaryImage )

Filtre l'image via la méthode HSV (Hue Saturation Value)

Cette fonction convertit une image de l'espace colorimétrique BGR à HSV, puis applique un filtre pour extraire les régions rouges.

Paramètres
inputImageImage d'entrée en BGR
binaryImageImage binaire résultante avec les régions rouges extraites

Autres valeurs HSV

◆ send_coordinates()

void send_coordinates ( int x,
int y )

Envoie les coordonnées au port série.

Cette fonction envoie les coordonnées X et Y au port série pour contrôler les servomoteurs.

Paramètres
xCoordonnée X à envoyer.
yCoordonnée Y à envoyer.

Documentation des variables

◆ microsecond

unsigned int microsecond = 1000000

Déclarations explicites

◆ prev_center

std::pair<int, int> prev_center = {0, 0}

◆ time_id

int time_id = 1