Skip to content

Instantly share code, notes, and snippets.

@adrienkaiser
Last active December 29, 2015 08:19
Show Gist options
  • Save adrienkaiser/7642513 to your computer and use it in GitHub Desktop.
Save adrienkaiser/7642513 to your computer and use it in GitHub Desktop.
Code to compute HDR image from a set of LDR images.
int create_EXR_channels_from_LDR_image(IplImage **images, const float *Te, int nimg, float gfunction[256], const int width, const int height, float* EXRDataPtr)
{
cvNamedWindow("images LDR", 0); // Tester : supprimer ceci
clock_t deb,fin,diff;
deb=clock();
CvScalar Z;
CvSize size=cvGetSize(images[0]);
float numerateur[3]={0.0,0.0,0.0},denominateur[3]={0.0,0.0,0.0};
float *dataf = EXRDataPtr;
float *Mdataf;
Mdataf = dataf;
int i,j,k,m,cpt=0;
for(k=0;k<nimg;k++)//affichage des N images d'entrée
{
printf("affichage image %d \n", k);
cvShowImage("images LDR", images[k]);
cvWaitKey();
}
for (j=0;j<size.height;j++)
{
for (i=0;i<size.width;i++)
{
// Traitement, a completer...
numerateur[0] =0;
numerateur[1] =0;
numerateur[2] =0;
denominateur[0] =0;
denominateur[1] =0;
denominateur[2] =0;
for(k=0;k<nimg;k++) // pour toutes les images
{
Z = cvGet2D(images[k], j, i);
numerateur[0] += weight_func( Z.val[2] ) * ( gfunction[(int)Z.val[2]] - log(Te[k]) );
denominateur[0] += weight_func( Z.val[2] );
numerateur[1] += weight_func( Z.val[1] ) * ( gfunction[(int)Z.val[1]] - log(Te[k]) );
denominateur[1] += weight_func( Z.val[1] );
numerateur[2] += weight_func( Z.val[0] ) * ( gfunction[(int)Z.val[0]] - log(Te[k]) );
denominateur[2] += weight_func( Z.val[0] );
}
dataf[0] = numerateur[0] / denominateur[0];
dataf[1] = numerateur[1] / denominateur[1];
dataf[2] = numerateur[2] / denominateur[2];
dataf+=3;
}
}
EXRDataPtr=Mdataf;
fin=clock();
printf("create_HDR : %d ms\n",(int)(fin-deb));
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment