1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <cv.h>
#include <cvaux.h>
#include <highgui.h>
#include <Cxcore.h>
#include <string.h>
using namespace std;
int main( int argc, char** argv )
{
// DECLARATION image".
IplImage *img;
//On charge L' image depuis un fichier.
img=cvLoadImage("C:\\Users\\dell\\Desktop\\ligne\\es2.jpg");
//On crée une fenêtre intitulée "im1",
cvNamedWindow("im1",1);
//On affiche l'image dans la fenêtre "im1".
cvShowImage("im1", img);
cvWaitKey(0);
// Conversion niveau de gris
IplImage *img_nvg = cvCreateImage(cvGetSize(img),8, 1);
IplImage *img_bin = cvCreateImage(cvGetSize(img),8, 1);
IplImage *img_line = cvCreateImage(cvGetSize(img),8, 1);
//On vérifie l'origine de l'image chargée
//Si elle n'est pas en haut à gauche, il faut la corriger
/*int flip=0;
if(img->origin!=IPL_ORIGIN_TL)
{
flip=CV_CVTIMG_FLIP;
}
*/
//Conversion en niveaux de gris
//cvConvertImage(img, img_nvg, flip);
cvCvtColor(img,img_nvg, CV_RGB2GRAY);
cvNamedWindow("im2",1);
cvShowImage("im2",img_nvg);
double p_min=255;
double p_max=0;
CvScalar scalaire;
cvWaitKey(0);
//On parcourt toute l'image
for(int x=0; x<img->width; x++)
{
for(int y=0; y<img->height; y++)
{
//On récupère le pixel de coordonnées (x,y)
scalaire=cvGet2D(img_nvg, y, x);
//Si le niveau de gris est inférieur à p_min, il devient p_min
if(scalaire.val[0]<p_min)
{
p_min=scalaire.val[0];
}
//Si le niveau de gris est supérieur à p_max, il devient p_max
if(scalaire.val[0]>p_max)
{
p_max=scalaire.val[0];
}
}
}
double T=p_max-0.4*(p_max-p_min);
cvThreshold(img_nvg,img_bin,T,255,CV_THRESH_BINARY);
/*for(int x=0; x<img->width; x++)
{
for(int y=0; y<img->height; y++)
{ scalaire=cvGet2D(img_nvg, y, x);
if(scalaire.val[0]>T)
{ scalaire.val[0]=255; }
else
{scalaire.val[0]=0; }
cvSet2D(img_nvg, y, x, scalaire);
}
}*/
cvNamedWindow("im3",1);
cvShowImage("im3",img_bin);
cvWaitKey(0);
int y=img_nvg->height;
int countN=1;
CvMat* points=cvCreateMatHeader(400,2,CV_32FC1);
/*double ctrx[2000];
double ctry[2000];*/
// Extraction des coordonnées des poits de la ligne
double countX;
double Ct[2000];
int count_point=0;
while(countN!=0 && y!=0)
{ countN=0;
countX=0;
for(int x=0; x<img->width; x++)
{ scalaire=cvGet2D(img_nvg, y, x);
if(scalaire.val[0]==255)
{countX=countX+x;
countN=countN+1;
}
}
points->rows=countX/countN;
points->cols=y;
//ctr[x]=[Ct];
//ctry[x]=[ctry];
y=y-1;
count_point=count_point+1;
} |
Partager