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.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*
  2. * Copyright (C) 2018 dimercur
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #ifndef _IMAGE_H_
  18. #define _IMAGE_H_
  19. #ifndef __STUB__
  20. #ifndef __FOR_PC__
  21. #include <raspicam/raspicam_cv.h>
  22. #else
  23. #include <opencv2/highgui/highgui.hpp>
  24. #endif /* __FOR_PC__ */
  25. #else
  26. #include <opencv2/highgui/highgui.hpp>
  27. #endif
  28. #include "opencv2/imgproc/imgproc.hpp"
  29. #include <unistd.h>
  30. #include <math.h>
  31. #define WIDTH 480 //1280 1024 640 480
  32. #define HEIGHT 360 // 960 768 480 360
  33. using namespace std;
  34. using namespace cv;
  35. #ifndef __STUB__
  36. #ifndef __FOR_PC__
  37. using namespace raspicam;
  38. #endif /* __FOR_PC__ */
  39. #endif
  40. typedef Mat Image;
  41. #ifndef __STUB__
  42. #ifndef __FOR_PC__
  43. typedef RaspiCam_Cv Camera;
  44. #else
  45. typedef int Camera;
  46. #endif /* __FOR_PC__ */
  47. #else
  48. typedef int Camera;
  49. #endif
  50. typedef Rect Arene;
  51. typedef vector<unsigned char> Jpg;
  52. struct Position {
  53. Point center;
  54. Point direction;
  55. float angle;
  56. };
  57. /**
  58. * \brief Ouvre une camera.
  59. * \details Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte
  60. *
  61. * \param camera Pointeur d'un file descriptor d'une camera ouverte
  62. * \return Retourne 0 si la camera a été ouverte correctement et -1 si une erreur survient.
  63. */
  64. int open_camera(Camera *camera);
  65. /**
  66. * \brief Ferme la camera passé en paramètre
  67. *
  68. * \param camera Pointeur sur la camera à fermer
  69. */
  70. void close_camera(Camera *camera);
  71. /**
  72. * \brief Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image
  73. * \details La camera doit préalablement être ouverte via \a openCamera(...)
  74. *
  75. * \param camera Pointeur sur la camera passée en entrée.
  76. * \param monImage Pointeur sur une image capturée.
  77. * \param fichier Chemin du fichier d'image
  78. * \return Retourne -1 si une erreur survient.
  79. */
  80. void get_image(Camera *camera, Image * monImage, const char *fichier = NULL);
  81. /**
  82. * \brief Détecte une arène dans une image fournis en paramètre.
  83. *
  84. * \param monImage Pointeur sur l'image d'entrée
  85. * \param rectangle Pointeur sur les coordonnées du rectangles trouvé.
  86. * \return Retourne -1 si aucune arène n'est détectée. Sinon retourne 0
  87. */
  88. int detect_arena(Image *monImage, Arene *rectangle);
  89. /**
  90. * \brief Dessine le plus petit rectangle contenant l'arène
  91. * \param imgInput Pointeur sur l'image d'entrée.
  92. * \param imgOutput Pointeur sur l'image de sortie (image d'entrée + arène marquée)
  93. * \param monArene Pointeur de type Arène contenant les information à dessiner
  94. */
  95. void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene);
  96. /**
  97. * \brief Détecte la position d'un robot.
  98. * \details Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.
  99. *
  100. * \param imgInput Pointeur sur l'image sur laquelle chercher la position du des robots.
  101. * \param posTriangle Pointeur sur un tableau de position ou seront stocké les positions des triangles détectés.
  102. * \param monArene Pointeur de type Arène si nécessaire d'affiner la recherche (optionnel)
  103. * \return Le nombre de triangles détectés.
  104. */
  105. int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene = NULL);
  106. /**
  107. * \brief Dessine sur une image en entrée la position d'un robot et sa direction.
  108. * \details Sauvegarde l'image des coordonnées passées par positionRobot superposée à l'image d'entrée sur imgOutput.
  109. *
  110. * \param imgInput Pointeur sur l'image d'entrée
  111. * \param imgOutput Pointeur sur l'image de sortie ( image d'entrée + dessin de la position)
  112. * \param positionRobot Pointeur sur la structure position d'un robot.
  113. */
  114. void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot);
  115. /**
  116. * \brief Détecte la position d'un robot.
  117. * \details Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.
  118. *
  119. * \param imgInput Pointeur sur l'image à sauvegarder en mémoire sous format jpg.
  120. * \param imageCompress Pointeur sur une image .jpg.
  121. */
  122. void compress_image(Image *imgInput, Jpg *imageCompress);
  123. #endif // _IMAGE_H_