Bonjour les amis,
j ai un code C d un programme de traitement de video/images. Mon projet c de bien comprendre (deinterlacing/interlacing) entrelacement et desentrelacement pour bien modifier le code c que j ai.
Car ds ce code, j ai des boucles et je dois les optimiser le maximum possible.
Alors s il vous plait si qlq1 connait les methodes de:
**entrelacement et desentrelacement
**optimisation du code C et les etapes a suivre.
Veuillez m aider.
Mes remerciements.
Pour avoir 1e idee:
char *im_scr_path = "/home/images/trevor_field_0.pgm";
char *im_f_path = "/home/images/trevor_field_0_deinter.pgm";
/* int im_height; */
/* int im_width; */
int first_field=0;
#define TEST
#ifdef TEST
pix_type ** read_raw_pgm_file(pix_type **im_src, int *im_height, int *im_width){
FILE *LireBin;
char tampon;
char* num;
unsigned int* dim;
unsigned int itr_x;
unsigned int itr_y;
int err;
unsigned char num_tmp;
/* Read raw PGM image file */
LireBin = fopen(im_scr_path, "rb");
if (!LireBin){
printf("ERREUR d ouverture\n");
return;
}
num = malloc(3);
dim = malloc(3*sizeof(unsigned int)) ;
if (feof(LireBin)){
printf("FILE OPEN ERROR \n");
return;
}
/* Read raw PGM image file header */
for(itr_x=0; itr_x<3; itr_x++)
fread((char *) &tampon, 1, sizeof(char),LireBin);
for(itr_x=0; itr_x<3; itr_x++){
itr_y = 0;
fread((char *) &tampon, 1, sizeof(char), LireBin);
while(itr_y != 3){
num[itr_y] = tampon;
fread((char *) &tampon,1, sizeof(char), LireBin);
itr_y++;
}
dim[itr_x] = atoi(num);
}
/* Read raw PGM image file pixel */
*im_width = (int)dim[0];
*im_height = (int)dim[1];
im_src = malloc(sizeof(pix_type*)*(*im_height));
for(itr_x=0; itr_x<(*im_height); itr_x++){
im_src[itr_x] = malloc(sizeof(pix_type)*(*im_width));
for(itr_y=0; itr_y<(*im_width); itr_y++){
fread((char *) &im_src[itr_x][itr_y], 1, sizeof(unsigned char), LireBin);
}
}
fclose(LireBin);
free(num);
printf("WIDTH: %d\t, HEIGHT: %d\n", *im_width,*im_height );
return im_src;
}
void write_raw_pgm_file(pix_type **im_f, int im_height, int im_width){
FILE *EcrireBin;
char* header_tmp;
char* ctmp;
unsigned int itr_x, itr_y;
/* Write raw PGM image file pixel*/
EcrireBin = fopen(im_f_path, "wb");
if (!EcrireBin)
return;
/* Create raw PGM image file header */
printf("MARIA 1\n");
ctmp = malloc(10);
header_tmp = malloc(20); /*new char[20];*/
strcat(header_tmp,"P5\n");
sprintf(ctmp,"%d",im_width);
strcat(header_tmp,ctmp);
strcat(header_tmp," ");
sprintf(ctmp,"%d",im_height);
strcat(header_tmp,ctmp);
strcat(header_tmp,"\n255\n");
fwrite((char *) header_tmp,1, sizeof(char)*strlen(header_tmp),EcrireBin);
for(itr_x=0; itr_x<im_height; itr_x++){
for(itr_y=0; itr_y<im_width; itr_y++){
fwrite((char *) &im_f[itr_x][itr_y],1, sizeof(unsigned char),EcrireBin);
}
}
fclose(EcrireBin);
free(ctmp);
free(header_tmp);
}
int main(){
int cur_field;
int nb_field;
int ***img_seq;
pix_type **img_src;
pix_type **img_deinterlaced;
int img_height,img_width;
int img_num = 0;
int row, col;
int the_int;
float the_float;
float the_height,the_width,the_nb_field,the_first_field;
#ifdef TEST
img_seq= read_raw_pgm_file(img_seq,&img_height,&img_width);
#endif
/* creation des sequences d'images */
#ifdef VIDEO
img_height = img_height / 2;
img_seq = malloc(sizeof(int**) * nb_field);
for(cur_field=0; cur_field<nb_field; cur_field++){
img_seq[cur_field] = malloc(sizeof(int*) * img_height);
for(row=0; row<img_height; row++){
img_seq[cur_field][row] = malloc (sizeof(int)*img_width);
for(col=0; col<img_width; col++){
if(getinput(&the_float) == 1)
img_seq[cur_field][row][col] = (int)the_float;
else
fprintf(stderr,"Image sequence is wrong size.\n");
}
}
}
#endif
img_deinterlaced = compute_ela_deinterlacer(&img_seq,img_height,img_width,first_field);
#ifdef TEST
if (img_deinterlaced)
write_raw_pgm_file(img_deinterlaced,img_height*2,img_width);
#endif
for(row=0; row<img_height; row++){
free ((int*)(img_seq[row]));
free ((int*)img_deinterlaced[row]);
}
for(row=img_height; row<img_height*2; row++){
free ((int*)img_deinterlaced[row]);
}
free ((int**)img_deinterlaced);
free ((int***)img_seq);
img_deinterlaced = NULL;
img_seq = NULL;
return 0;
}
#endif