![]() |
Projet Imposé V3.1.2
Suivre une coleur via OpenCV
|
#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>
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 > ¢er, 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 > ¢er) |
| 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 |
| #define _USE_MATH_DEFINES |
Bibliothèques C++ intégrées Bibliothèques OpenCV intégrées Bibliothèques C intégrées
| #define MIN_RED_PIXELS 2000 |
| #define MOVEMENT_THRESHOLD 10 |
| #define ROI_SIZE 450 |
| #define SEUIL 30 |
| #define TIME_THRESHOLD 0.189 |
| 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.
| counter | Nombre de pixels représentant l'objet. |
| void delay | ( | float | seconds | ) |
Fonction de temporisation.
Cette fonction met en pause l'exécution du programme pendant un certain nombre de secondes.
| seconds | Nombre de secondes de pause |
| 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.
| image | Image sur laquelle dessiner. |
| center | Coordonnées du centre de l'objet. |
| diameter | Diamètre de l'objet. |
| 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.
| binary_image | Image binaire contenant des pixels blancs |
| 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.
| min | Valeur minimale de la zone morte. |
| max | Valeur maximale de la zone morte. |
| center | Coordonnées du centre de l'objet. |
| 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é.
| argc | Nombre d'arguments. |
| argv | Tableau d'arguments. |
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
| 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.
| inputImage | Image d'entrée en BGR |
| binaryImage | Image binaire résultante avec les régions rouges extraites |
Autres valeurs HSV
| 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.
| x | Coordonnée X à envoyer. |
| y | Coordonnée Y à envoyer. |
| unsigned int microsecond = 1000000 |
Déclarations explicites
| std::pair<int, int> prev_center = {0, 0} |
| int time_id = 1 |