53 if(imgInput!=imgOutput)
54 *imgOutput=imgInput->clone();
55 rectangle(*imgOutput,monArene->tl(),monArene->br(),Scalar(0,0,125),2,8,0);
64 printf(
"Opening Camera...\n");
69 #else // for raspberry 71 camera->set(CV_CAP_PROP_FORMAT, CV_8UC3);
72 camera->set(CV_CAP_PROP_FRAME_WIDTH,
WIDTH);
73 camera->set(CV_CAP_PROP_FRAME_HEIGHT,
HEIGHT);
75 printf(
"Opening Camera...\n");
76 if (!(camera->open())) {
77 perror(
"Can't open Camera\n") ;
82 printf(
"Camera warmup 2sec\n");
84 printf(
"Start capture\n");
101 #else // for raspberry 103 camera->retrieve(*monImage);
104 cvtColor(*monImage,*monImage,CV_BGR2RGB);
107 stubImg = imread(fichier, CV_LOAD_IMAGE_COLOR);
108 stubImg.copyTo(*monImage);
117 #else // for raspberry 128 vector<vector<Point> > contours;
129 vector<Point> approx;
130 vector<Vec4i> hierarchy;
133 cvtColor(*monImage,imageTrt,CV_RGB2GRAY);
134 threshold(imageTrt,imageTrt,128,255,CV_THRESH_BINARY);
135 Canny(imageTrt, imageTrt, 100,200,3);
137 findContours(imageTrt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
138 for(
unsigned int i = 0; i < contours.size();i++)
140 approxPolyDP(
Image(contours[i]), approx, arcLength(
Image(contours[i]),
true)*0.1,
true);
141 if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000)
143 *rectangle = boundingRect(
Image(contours[i]));
153 img=imgInput->clone();
155 *imgOutput = img(*areneInput);
161 return cv::sqrt(diff.x*diff.x + diff.y*diff.y);
166 imencode(
".jpg",*imgInput,*imageCompress);
172 vector<vector<Point> > contours;
173 vector<Point> approx;
174 vector<Vec4i> hierarchy;
179 imgTraitment=imgInput->clone();
181 cropArena(imgInput,&imgTraitment, monArene);
183 cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY);
184 threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY);
185 findContours(imgTraitment, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
188 for(
unsigned int i = 0;i < contours.size();i++)
190 approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]),
true)*0.17,
true);
191 if(approx.size() == 3 && fabs(contourArea(contours[i])) > 200 && fabs(contourArea(contours[i])) < 700)
213 center.x = (a.x + b.x + c.x)/3;
214 center.y = (a.y + b.y + c.y)/3;
216 posTriangle[nbrTriangle].
center=center;
246 if(imgInput!=imgOutput)
248 *imgOutput=imgInput->clone();
250 line(*imgOutput,positionRobot->
center,positionRobot->
direction,Scalar(0,125,0),2,8,0);
257 float angle = atan2(b,a);
258 return angle * 180.f/M_PI;
void compress_image(Image *imgInput, Jpg *imageCompress)
Détecte la position d'un robot.
void get_image(Camera *camera, Image *monImage, const char *fichier)
Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une...
void close_camera(Camera *camera)
Ferme la camera passé en paramètre.
int cropArena(Image *imgInput, Image *imgOutput, Arene *AreneInput)
int detect_arena(Image *monImage, Arene *rectangle)
Détecte une arène dans une image fournis en paramètre.
int open_camera(Camera *camera)
Ouvre une camera.
Functions for image treatment.
int detect_position(Image *imgInput, Position *posTriangle, Arene *monArene)
Détecte la position d'un robot.
void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene)
Dessine le plus petit rectangle contenant l'arène.
float euclideanDist(Point &p, Point &q)
vector< unsigned char > Jpg
float calculAngle(Position *positionRobot)
void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot)
Dessine sur une image en entrée la position d'un robot et sa direction.