No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

image.h 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * \file image.h
  3. * \author L.Senaneuch
  4. * \version 1.0
  5. * \date 06/06/2017
  6. * \brief Fonctions de traitement d'image utilisable pour la d�tection du robot.
  7. *
  8. * \details Ce fichier utilise la libraire openCV2 pour faciliter le traitement d'image dans le projet Destijl.
  9. * Il permet de faciliter la d�tection de l'ar�ne et la d�tection du robot.
  10. * /!\ Attention Bien que celui-ci soit un .cpp la structure du code n'est pas sous forme d'objet.
  11. */
  12. #ifndef IMAGERIE_H
  13. #define IMAGERIE_H
  14. #define __STUB__
  15. #ifndef __STUB__
  16. #include <raspicam/raspicam_cv.h>
  17. #else
  18. #include <opencv2/highgui/highgui.hpp>
  19. #endif
  20. #include "opencv2/imgproc/imgproc.hpp"
  21. #include <unistd.h>
  22. #include <math.h>
  23. #define WIDTH 480 //1280 1024 640 480
  24. #define HEIGHT 360 // 960 768 480 360
  25. using namespace std;
  26. using namespace cv;
  27. #ifndef __STUB__
  28. using namespace raspicam;
  29. #endif
  30. typedef Mat Image;
  31. #ifndef __STUB__
  32. typedef RaspiCam_Cv Camera;
  33. #else
  34. typedef int Camera;
  35. #endif
  36. typedef Rect Arene;
  37. typedef vector<unsigned char> Jpg;
  38. struct Position {
  39. Point center;
  40. Point direction;
  41. float angle;
  42. };
  43. /**
  44. * \brief Ouvre une camera.
  45. * \details Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte
  46. *
  47. * \param *Camera Pointeur d'un file descriptor d'une camera ouverte
  48. * \return retourne 0 si la camera a été ouverte correctement et -1 si une erreur survient.
  49. */
  50. int open_camera(Camera *camera);
  51. /**
  52. * \brief Ferme la camera passé en paramètre
  53. *
  54. * \param *Camera Pointeur sur la camera à fermer
  55. */
  56. void close_camera(Camera *camera);
  57. /**
  58. * \brief Capture une image avec la camera passée en entrée. En cas de test
  59. * sans camera, la fonction charge une image
  60. * \details La camera doit préalablement être ouverte via \a openCamera(...)
  61. *
  62. * \param *Camera Pointeur sur la camera passée en entrée.
  63. * \param *monImage Pointeur sur une image capturée.
  64. * \param *fichier chemin du fichier d'image
  65. * \return Retourne -1 si une erreur survient.
  66. */
  67. void get_image(Camera *camera, Image * monImage, const char *fichier = NULL);
  68. /**
  69. * \brief Détecte une arène dans une image fournis en paramètre.
  70. *
  71. * \param *monImage Pointeur sur l'image d'entrée
  72. * \param *rectangle Pointeur sur les coordonnées du rectangles trouvé.
  73. * \return Retourne -1 si aucune arène n'est détectée. Sinon retourne 0
  74. */
  75. int detect_arena(Image *monImage, Arene *rectangle);
  76. /**
  77. * \brief Dessine le plus petit rectangle contenant l'arène
  78. * \param *imgInput Pointeur sur l'image d'entrée.
  79. * \param *imgOutput Pointeur sur l'image de sortie (image d'entrée + arène marquée)
  80. * \param *monArene Pointeur de type Arène contenant les information à dessiner
  81. */
  82. void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene);
  83. /**
  84. * \brief Détecte la position d'un robot.
  85. * \details Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.
  86. *
  87. * \param *imgInput Pointeur sur l'image sur laquelle chercher la position du des robots.
  88. * \param *posTriangle Pointeur sur un tableau de position ou seront stocké les positions des triangles détectés.
  89. * \param *monArene Pointeur de type Arène si nécessaire d'affiner la recherche (optionnel)
  90. * \return Le nombre de triangles détectés.
  91. */
  92. int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene = NULL);
  93. /**
  94. * \brief Dessine sur une image en entrée la position d'un robot et sa direction.
  95. * \details Sauvegarde l'image des coordonnées passées par positionRobot
  96. * superposée à l'image d'entrée sur imgOutput.
  97. *
  98. * \param *imgInput Pointeur sur l'image d'entrée
  99. * \param *imgOutput Pointeur sur l'image de sortie ( image
  100. * d'entrée + dessin de la position)
  101. * \param *positionRobot Pointeur sur la structure position d'un robot.
  102. */
  103. void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot);
  104. /**
  105. * \brief Détecte la position d'un robot.
  106. * \details Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.
  107. *
  108. * \param *imgInput Pointeur sur l'image à sauvegarder en mémoire sous format jpg.
  109. * \param *imageCompress Pointeur sur une image .jpg.
  110. */
  111. void compress_image(Image *imgInput, Jpg *imageCompress);
  112. #endif // IMAGERIE_H