begin process at 2010 02 10 10:50:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > CALCUL LA MOYENNE DE L'HISTOGRAMME D'UNE IMAGE.

CALCUL LA MOYENNE DE L'HISTOGRAMME D'UNE IMAGE.


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :.Net Classé sous :moyenne, calculmoyenne, histogramme Niveau :Débutant Date de création :11/09/2003 Date de mise à jour :11/09/2003 09:43:09 Vu :11 881

Auteur : deuffdeuffer

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Mon code (win32 console application) lit d'abord l'en-tete d'une image BMP (INFOHEADER et FILEHEADER)et calcul ensuite l'histogramme de l'image. Je calcul ensuite la moyenne de l'histogramme ce qui correspond à la luminance.

J'ai fait cela pour mon travail et j'aimerais arriver à creer une boite de dialogue permettant de demander le chemin de l'image, histoire de ne pas toucher le code source a chaque fois que l'on veut mesurer une image differente. (Ce programme sera utiliser par une personne qui n'y connait rien en info.)

Je sais faire les boites de dialogues et tout et tout, mais une fois dans MFC mon prog marche plus!!!!

Source

  • /// Programme effectuant une moyenne de l'histogramme d'une image////
  • /// Le plus gros est la lecture de l'en tete de l'image ////////////
  • /// DEUFF /////////////// 11/09/03 //////////////////////////////////
  • #include "stdafx.h"
  • #include "stdio.h"
  • #include "stdlib.h"
  • #include "windows.h"
  • int main(int argc,char*argv[])
  • {
  • FILE *imgDep;
  • unsigned long i, nb, nbLu, *histo;
  • char type[2];
  • int tailleFic, reserved, offBit;
  • int biSize, biWidth, biHeight;
  • short biPlanes, biBitCount;
  • int biCompression, biSizeImage, biXpix, biYpix, biClrUsed, biClrImportant;
  • unsigned char couleur[4],*pixel;
  • /////////// LECTURE DES DONNEES DE LIMAGE////////////////////////////////////////////////////////////////
  • imgDep = fopen("C:\\Temp\\030908_113556.bmp","rb");
  • if (imgDep == NULL)
  • {printf ("Problemes images depart 1");
  • return (0);}
  • nb = 2;
  • nbLu = fread (type, sizeof(char),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 2");
  • return(0);
  • }
  • printf("imgDep %c %c ",type[0],type[1]);
  • nb = 1;
  • nbLu = fread (&tailleFic, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 3");
  • return(0);
  • }
  • printf("taille = %d ",tailleFic);
  • nb = 1;
  • nbLu = fread (&reserved, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 4");
  • return(0);
  • }
  • printf("reserve = %d\n\n",reserved);
  • nb = 1;
  • nbLu = fread (&offBit, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 5");
  • return(0);
  • }
  • printf("offBits = %d octets ",offBit);
  • nb = 1;
  • nbLu = fread (&biSize, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 6");
  • return(0);
  • }
  • printf("biSize=%d octets \n\n",biSize);
  • nb = 1;
  • nbLu = fread (&biWidth, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 7");
  • return(0);
  • }
  • printf("biWidth=%d ",biWidth);
  • nb = 1;
  • nbLu = fread (&biHeight, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 8");
  • return(0);
  • }
  • printf("biHeight=%d \n\n",biHeight);
  • nb = 1;
  • nbLu = fread (&biPlanes, sizeof(short),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 9");
  • return(0);
  • }
  • printf("biPlanes=%d ",biPlanes);
  • nb = 1;
  • nbLu = fread (&biBitCount, sizeof(short),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 10");
  • return(0);
  • }
  • printf("biBitCount=%d ",biBitCount);
  • nb = 1;
  • nbLu = fread (&biCompression, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 11");
  • return(0);
  • }
  • printf("biCompression=%d \n\n",biCompression);
  • nb = 1;
  • nbLu = fread (&biSizeImage, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 12");
  • return(0);
  • }
  • printf("biSizeImage=%d ",biSizeImage);
  • nb = 1;
  • nbLu = fread (&biXpix, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 13");
  • return(0);
  • }
  • printf("biXpix=%d ",biXpix);
  • nb = 1;
  • nbLu = fread (&biYpix, sizeof(int),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 14");
  • return(0);
  • }
  • printf("biYpix=%d \n\n",biYpix);
  • nb = 1;
  • nbLu = fread(&biClrUsed,sizeof(int),nb,imgDep);
  • if(nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 4");
  • return(0);
  • }
  • printf("biClrUsed = %d ",biClrUsed);
  • nb = 1;
  • nbLu = fread(&biClrImportant,sizeof(int),nb,imgDep);
  • if(nbLu!=nb)
  • {
  • fclose(imgDep);
  • printf("Problemes images depart 5");
  • return(0);
  • }
  • printf("biClrImportant = %d\n\n\n\n",biClrImportant);
  • /* for (i=0;i<biClrUsed;i++)
  • {
  • nb = 4;
  • nbLu = fread(couleur,sizeof(unsigned char),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose (imgDep);
  • printf (" Problemes images depart 6 ");
  • return (0);
  • }
  • printf("couleur %d, %d, %d, %d\n",couleur[0],couleur[1],couleur[2],couleur[3]);
  • }*/
  • nb=( biWidth * biHeight * biPlanes * biBitCount )/8;
  • printf ("nb = %d\n\n",nb);
  • pixel = (unsigned char*) malloc (nb*sizeof(unsigned char));
  • if (pixel) nbLu= fread(pixel,sizeof(unsigned char),nb,imgDep);
  • if (nbLu!=nb)
  • {
  • fclose (imgDep);
  • return(0);
  • }
  • fclose (imgDep);
  • //////////////////// CALCUL DE LHISTOGRAMME ////////////////////////////////////////////////////////////
  • histo=(unsigned long*)malloc(biClrUsed*sizeof(unsigned long));
  • for (i=0;i<256;i++)
  • {histo[i]=0;}
  • for(i=0;i<nb;i++)
  • {histo[pixel[i]]=histo[pixel[i]]+1;}
  • char s[10];
  • FILE *fichisto;
  • fichisto = fopen("C:\\Program Files\\Endoscope\\Capture\\histo3.xls","w");
  • for (i=0;i<256;i++)
  • {
  • sprintf (s,"%8d\n",histo[i]);
  • fwrite(s,sizeof(s),1,fichisto);
  • }
  • fclose (fichisto);
  • ////////////////// CALCUL DE LA LUMINANCE DE LIMAGE (OU MOYENNE DE LHISTOGRAMME) //////////////////////
  • int N=biHeight*biWidth; // calcul du nombre totale de pixel
  • int g=0;
  • for (i=0;i<=255;i++)
  • { g= g + (i*histo[i]);}
  • int Y= g/N;
  • ///////////////////////////// AFFICHAGE /////////////////////////////////////////////////////////
  • printf(" --------------------------------------- \n");
  • printf(" | LUMINANCE = %d =",Y);
  • if (Y<70) printf (" TROP SOMBRE |\n");
  • else printf(" IMAGE BONNE |\n");
  • printf(" --------------------------------------- \n\n\n\n\a");
  • return(0);
  • }
/// Programme effectuant une moyenne de l'histogramme d'une image////
/// Le plus gros est la lecture de l'en tete de l'image  ////////////
/// DEUFF /////////////// 11/09/03 //////////////////////////////////




#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"

int main(int argc,char*argv[])
{
	FILE             *imgDep;
	unsigned long    i,  nb,  nbLu, *histo;
	char             type[2];
	int              tailleFic,  reserved,  offBit;  
	int			     biSize, biWidth, biHeight;
	short            biPlanes, biBitCount;
	int              biCompression, biSizeImage, biXpix, biYpix, biClrUsed, biClrImportant;
	unsigned char    couleur[4],*pixel;
	
	
/////////// LECTURE DES DONNEES DE LIMAGE////////////////////////////////////////////////////////////////	
	
	imgDep = fopen("C:\\Temp\\030908_113556.bmp","rb");
	
	
	if (imgDep == NULL)
		{printf ("Problemes images depart 1");
		return (0);}


	nb = 2;
	nbLu = fread (type, sizeof(char),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 2");
			return(0);
		}
	printf("imgDep %c %c               ",type[0],type[1]);
	

	nb = 1;
	nbLu = fread (&tailleFic, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 3");
			return(0);
		}
	printf("taille = %d          ",tailleFic);


	nb = 1;
	nbLu = fread (&reserved, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 4");
			return(0);
		}
	printf("reserve = %d\n\n",reserved);


	nb = 1;
	nbLu = fread (&offBit, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 5");
			return(0);
		}
	printf("offBits = %d octets      ",offBit);




	nb = 1;
	nbLu = fread (&biSize, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 6");
			return(0);
		}
	printf("biSize=%d octets           \n\n",biSize);




	nb = 1;
	nbLu = fread (&biWidth, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 7");
			return(0);
		}
	printf("biWidth=%d              ",biWidth);


	nb = 1;
	nbLu = fread (&biHeight, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 8");
			return(0);
		}
	printf("biHeight=%d           \n\n",biHeight);



	nb = 1;
	nbLu = fread (&biPlanes, sizeof(short),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 9");
			return(0);
		}
	printf("biPlanes=%d               ",biPlanes);


	nb = 1;
	nbLu = fread (&biBitCount, sizeof(short),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 10");
			return(0);
		}
	printf("biBitCount=%d            ",biBitCount);
	
	
	nb = 1;
	nbLu = fread (&biCompression, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 11");
			return(0);
		}
	printf("biCompression=%d \n\n",biCompression);	
	
	
	nb = 1;
	nbLu = fread (&biSizeImage, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 12");
			return(0);
		}
	printf("biSizeImage=%d            ",biSizeImage);	



	nb = 1;
	nbLu = fread (&biXpix, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 13");
			return(0);
		}
	printf("biXpix=%d                 ",biXpix);


	nb = 1;
	nbLu = fread (&biYpix, sizeof(int),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 14");
			return(0);
		}
	printf("biYpix=%d \n\n",biYpix);



	nb = 1;
	nbLu = fread(&biClrUsed,sizeof(int),nb,imgDep);
	if(nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 4");
			return(0);
		}
	printf("biClrUsed = %d            ",biClrUsed);


	nb = 1;
	nbLu = fread(&biClrImportant,sizeof(int),nb,imgDep);
	if(nbLu!=nb)
		{
			fclose(imgDep);
			printf("Problemes images depart 5");
			return(0);
		}
	printf("biClrImportant = %d\n\n\n\n",biClrImportant);


/*	for (i=0;i<biClrUsed;i++)
		{
			nb = 4;
			nbLu = fread(couleur,sizeof(unsigned char),nb,imgDep);
			if (nbLu!=nb)
				{
					fclose (imgDep);
					printf (" Problemes images depart 6 ");
					return (0);
				}
			printf("couleur %d, %d, %d, %d\n",couleur[0],couleur[1],couleur[2],couleur[3]);
		}*/
	
	
	nb=( biWidth * biHeight * biPlanes * biBitCount )/8;
	printf ("nb = %d\n\n",nb);

	pixel = (unsigned char*) malloc (nb*sizeof(unsigned char));
	if (pixel) nbLu= fread(pixel,sizeof(unsigned char),nb,imgDep);
	if (nbLu!=nb)
		{
			fclose (imgDep);
			return(0);
		}
	
	fclose (imgDep);
	
//////////////////// CALCUL DE LHISTOGRAMME ////////////////////////////////////////////////////////////	
	
	histo=(unsigned long*)malloc(biClrUsed*sizeof(unsigned long));
	for (i=0;i<256;i++)
		{histo[i]=0;}

	for(i=0;i<nb;i++) 
		{histo[pixel[i]]=histo[pixel[i]]+1;}

	char s[10];
	FILE *fichisto;
	fichisto = fopen("C:\\Program Files\\Endoscope\\Capture\\histo3.xls","w");
	for (i=0;i<256;i++)
		{
			sprintf (s,"%8d\n",histo[i]);
			fwrite(s,sizeof(s),1,fichisto);
		}
	fclose (fichisto);

		
////////////////// CALCUL DE LA LUMINANCE DE LIMAGE (OU MOYENNE DE LHISTOGRAMME) //////////////////////         
			
	int N=biHeight*biWidth;             // calcul du nombre totale de pixel
			
	int g=0;
	for (i=0;i<=255;i++)
		{ g= g + (i*histo[i]);}

	int Y= g/N;

///////////////////////////// AFFICHAGE /////////////////////////////////////////////////////////	
	printf("                ---------------------------------------                 \n");
	printf("                |   LUMINANCE =  %d  =",Y);

	if (Y<70) printf ("  TROP SOMBRE   |\n");
	else printf("  IMAGE BONNE  |\n");

	printf("                ---------------------------------------                 \n\n\n\n\a");


	return(0);
}
	

 Conclusion

Si quelqun peut m'aider a faire fonctionner cela dans une BDLG qui demanderait le chemin de l'image , avec un bouton calcul et une case resultat ce serait vraiment sympa.
merci.


 Sources de la même categorie

Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo
Source avec Zip Source avec une capture Source .NET (Dotnet) SCANNER D'ADRESSES MAILS PRÉSENTENT SUR GOOGLE par Zaltez

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GRAPHIQUE A BARRES PARAMETRABLE (FIXE OU ANIME) par yann_lo_san
MOYENNE CALCULATEUR par arachnid
Source .NET (Dotnet) CALCULE ET AFFICHE LE MAX LE MIN ET LA MOYENNE D'UN VECTEUR par trioy

Commentaires et avis

Commentaire de BruNews le 11/09/2003 10:12:29 administrateur CS

Certain que va y avoir quelques modifs pour le porter en mode GUI. Je peux te le faire mais en win32 direct API, ni mfc ni autre truc inutile.

Commentaire de deuffdeuffer le 11/09/2003 11:06:13

ca serait vraiment cool de ta part.
J'essaye de mon coté mais j'arrive a rien.

il y a des trucs que l'on peut supprimer ou raccourcir :
tout les tests d'ouverture peuvent etre enlever car les images que je vais ouvrir auront toujours les memes caracteristiques.

ptite question idiote (je suis pas un programmeur de génie, je dirais meme que je suis un gros galerien) : win 32 API = ????
(je nai que Visual C++)
Merci de ton aide.

Commentaire de BruNews le 11/09/2003 11:25:01 administrateur CS

Bon on fait.
API = fonctions du systeme d'exploitation (en gros).

Commentaire de deuffdeuffer le 11/09/2003 11:27:06

ok!
merci

Commentaire de mone et pock le 09/01/2004 10:10:48

BruNews,
à force de croise le chat noir sur tout les sources que je consulte, je commence à me dire qu'il doit pas être si idiot que ça le matou! La gestion de l'interface graphique avec l'API windows m'intéresse, si tu as un code simple, je suis preneur!
bonne continuation

Commentaire de BruNews le 09/01/2004 10:23:45 administrateur CS

Je note la demande mais je suis super deborde en ce moment.
Sera fait des que j'aurai un creux.

Commentaire de mone et pock le 09/01/2004 10:25:59

merci!

Commentaire de neohp le 27/02/2004 00:20:11

ok.... interressant pour la partie "decodage" du fichier bmp...

par contre , niveau code, peut faire meuh.. ;)
perso, j'appele ca du hardcore goret coding style

mais bon ca sa vient en codant.. donc persevere !!

deja, histoire de raccourcir un peu le code, utilise une boucle for (ou while pour une meilleure gestion des erreurs) .... et des tableaux de chaine de char...

sinon en MFC le stdio.h il aime pas tjs....

bon courage

Commentaire de stephanieL le 31/05/2005 15:56:23

une petite question: j'ai cree un projet win 32 console application sous vc6 pour ce code, et a la compilation, il ne trouve pas le fichier stdafx.h.
qu'est ce que je peux faire pour que cela puisse compiler correctement?
merci!!!!
Stephanie

Commentaire de bahiatoon le 20/07/2006 16:44:55

Salut,
je veux afficher l'histogramme d'une image BMP mais en utilisant le Borland C++ builder 6, je pense qu'il faut utiliser le composant graphique TPaitBox, mais je ne sais pas qu'elle est l'instruction qui va me permettre d'afficher l'histogramme sur ce composant!


aidez moi SVP
a+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Histogramme [ par stockley81 ] Bonjourj'ai recupere toutes les valeurs des pixels d'une image stockees dans des tableaux et je souhaite realiser un histogramme de l'image. C'est dir Histogramme en barre avec MFC [ par tkrys ] Bonjour.Je voudrais connaitre, s'il vous plait, la manière de dessiner un histogramme dans une boite de dialogue en MFC...Je sais qu'il existe une fon Redimenssion de fenêtre et permanence de son contenu (V C++) [ par TahitiLove ] Bonjour,J'aimerai savoir comment peut on assurer la permanence du contenu d'une fenêtre.Je m'explique, j'ai créer un projet sous Visual C++ utilisant calcule de moyenne d'un etudiant [ par smailhou ] Bonjourvoila je suis debutant en programmation et j ai un tp a rendre alors j aimerais bien que vous m aidiez merci voila l exercise. On désire créer image/ histogramme [ par lindafar ] Bonjour,je suis débutante en C++ (visual .net) j'aimerais lire une image "Jpg" et tracer son histogramme, comment faire s'il vous plaît!!!!! Les tableaux [ par xelados ] Mon probleme porte sur les tableaux je comrpend plus ou moin ce qui ne fonctionne pas ... mais en gros je voulais que mon tableau (tab) sois dynamique URGENT - Calculer la meilleur et mauvaise moyenne dans un groupe d'etudiants?? [ par shinrei ] Bonjour, Je dois faire un script qui fait une statistique sur les notes, j'arrive a calculer la meilleur,mauvaise moyenne des etudiants. Par contre, comment en traite les fichiers en c++ [ par sahliali ] je veux construire un fichier etudiant qui contient la matricule et le nom et le prenom de l'etudiant et un autre fichier moyenne&nbsp;qui contient la Besoin de conseils concernant l'affichage de courbe [ par fab3131 ] Je code sous visual c++.netEt j'aimerais savoir selon vous qu'est qui est mieux de faire entre l'affichage d'une courbe et l'affichage d'un histogramm programmer un histogramme d'une sphére [ par mimiche22 ] je voulais vous demander s'il vous plait comment prod&#233;der pour ecrire un programme permettant de visualiser l'histogramme d'une sph&#233;re cette


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales