Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CREER,LIRE,ECRIRE ET SEUILLER UNE IMAGE RAW(ALLOCATION DYNAMIQUE ...)


Information sur la source

Catégorie :Graphique Niveau : Débutant Date de création : 27/06/2003 Date de mise à jour : 17/07/2003 22:52:06 Vu / téléchargé: 8 578 / 697

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

Bon, c'etait une demande du forum, alors je fais en faire profiter tout le monde ...C'est hyper basique et c'est en mode console, donc rien de bien extraordinaire ...  

!!! qd vous saisissez les nom d'images, il faut rajouter l'extension ".raw" (photoshop le genere et le lit tres bien ...)  
 

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • unsigned char ** allocation(int NBL, int NBC)
  • {
  • int i, j;
  • unsigned char **image;
  • image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
  • if (image == NULL)
  • return(NULL);
  • for (i=0;i<NBL;i++)
  • {
  • image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
  • if (image[i] == NULL)
  • {
  • for (j=0;j<i;j++)
  • free(image[j]);
  • free(image);
  • return(NULL);
  • }
  • }
  • return(image);
  • }
  • void desallocation(unsigned char **image, int NBL)
  • {
  • int i;
  • if (image == NULL)
  • exit(0);
  • for (i=0;i<NBL;i++)
  • free(image[i]);
  • free(image);
  • }
  • void LireImageRAW(unsigned char** image, int NBL, int NBC)
  • {
  • char nom_image[256];
  • FILE * fic_image;
  • int i, j;
  • getchar();
  • printf("Nom de l'image a ouvrir : \n");
  • gets(nom_image);
  • fic_image = fopen(nom_image,"rb");
  • if (fic_image == NULL)
  • {
  • printf("Erreur a l'ouverture de l'image ...\n");
  • exit(0);
  • }
  • else
  • printf("Image ouverte avec succes ...\n");
  • for(i=0;i<NBL;i++)
  • for(j=0;j<NBC;j++)
  • fread(&image[i][j],1,1,fic_image);
  • fclose(fic_image);
  • }
  • void EcrireImageRAW(unsigned char** image, int NBL, int NBC)
  • {
  • char nom_image[256];
  • FILE * fic_image;
  • int i, j;
  • getchar();
  • printf("Nom de l'image a ecrire : \n");
  • gets(nom_image);
  • fic_image = fopen(nom_image,"wb");
  • if (fic_image == NULL)
  • {
  • printf("Erreur a la creation de l'image ...\n");
  • exit(0);
  • }
  • else
  • printf("Image cree avec succes ...\n");
  • for(i=0;i<NBL;i++)
  • for(j=0;j<NBC;j++)
  • fwrite(&image[i][j],1,1,fic_image);
  • fclose(fic_image);
  • }
  • void SeuilImageRAW(unsigned char** image, int NBL, int NBC, int seuil)
  • {
  • int i, j;
  • for(i=0;i<NBL;i++)
  • for(j=0;j<NBC;j++)
  • {
  • if (image[i][j] < seuil)
  • image[i][j] = 0;
  • else
  • image[i][j] = 255;
  • }
  • }
  • int main()
  • {
  • unsigned char ** image;
  • int NBL, NBC, seuil;
  • printf("Nombre de lignes de l'image :\n");
  • scanf("%d",&NBL);
  • printf("Nombre de colonnes de l'image :\n");
  • scanf("%d",&NBC);
  • image = allocation(NBL,NBC);
  • if (image != NULL)
  • {
  • LireImageRAW(image,NBL,NBC);
  • printf("Seuil a appliquer : \n");
  • scanf("%d",&seuil);
  • SeuilImageRAW(image,NBL,NBC,seuil);
  • EcrireImageRAW(image,NBL,NBC);
  • desallocation(image,NBL);
  • }
  • else
  • {
  • printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
  • return 1;
  • }
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>

unsigned char ** allocation(int NBL, int NBC)
{
	int i, j;
	unsigned char **image;

	image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
	if (image == NULL)
		return(NULL);

	for (i=0;i<NBL;i++)
	{
		image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
		if (image[i] == NULL)
		{
			for (j=0;j<i;j++)
				free(image[j]);

			free(image);
			return(NULL);
		}
	}

	return(image);
}

void desallocation(unsigned char **image, int NBL)
{
	int i;

	if (image == NULL)
		exit(0);

	for (i=0;i<NBL;i++)
		free(image[i]);

	free(image);
}

void LireImageRAW(unsigned char** image, int NBL, int NBC)
{
	char nom_image[256];
	FILE * fic_image;
	int i, j;

	getchar();
	printf("Nom de l'image a ouvrir : \n");
	gets(nom_image);

	fic_image = fopen(nom_image,"rb");

	if (fic_image == NULL)
	{
		printf("Erreur a l'ouverture de l'image ...\n");
		exit(0);
	}
	else
		printf("Image ouverte avec succes ...\n");

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
			fread(&image[i][j],1,1,fic_image);

	fclose(fic_image);
}

void EcrireImageRAW(unsigned char** image, int NBL, int NBC)
{
	char nom_image[256];
	FILE * fic_image;
	int i, j;

	getchar();
	printf("Nom de l'image a ecrire : \n");
	gets(nom_image);

	fic_image = fopen(nom_image,"wb");

	if (fic_image == NULL)
	{
		printf("Erreur a la creation de l'image ...\n");
		exit(0);
	}
	else
		printf("Image cree avec succes ...\n");

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
			fwrite(&image[i][j],1,1,fic_image);

	fclose(fic_image);
}

void SeuilImageRAW(unsigned char** image, int NBL, int NBC, int seuil)
{
	int i, j;

	for(i=0;i<NBL;i++)
		for(j=0;j<NBC;j++)
		{
			if (image[i][j] < seuil)
				image[i][j] = 0;
			else
				image[i][j] = 255;
		}
}

int main()
{
	unsigned char ** image;
	int NBL, NBC, seuil;

	printf("Nombre de lignes de l'image :\n");
	scanf("%d",&NBL);
	printf("Nombre de colonnes de l'image :\n");
	scanf("%d",&NBC);

	image = allocation(NBL,NBC);

	if (image != NULL)
	{
		LireImageRAW(image,NBL,NBC);

		printf("Seuil a appliquer : \n");
		scanf("%d",&seuil);

		SeuilImageRAW(image,NBL,NBC,seuil);
		EcrireImageRAW(image,NBL,NBC);
		desallocation(image,NBL);
	}
	else
	{
		printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
		return 1;
	}


	return 0;
}   

Conclusion

j'ai pas mis de commentaires, mais c'est pas hyper complique ... sinon, posez vos questions!  
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de JediMaster le 29/06/2003 11:15:54

elle a l'air vachement bien t'as source mais je comprends pas tout...
tu pourrais mettre a quoi correspond les variables du style int NBL, int NBC et les autres.
ce serais vraiment cool et une image .raw c'est comme une image .bmp y a juste l'estension qui change? non?
et aussi c'est quoi seuiller l'image(je sais chuis nul!)

signaler à un administrateur
Commentaire de payen le 29/06/2003 13:26:59

Bon, je pensais que c'etait assez simple ... surtout pour les variables comme NBL et NBC quii correspondent aux Nombres de Lignes et de Colonnes de l'image ...
unsigned char ** image permet de creer un tableau a 2 dimensions pour stocker l'image ...
Ensuite, un image ".raw", c'est le format le plus simple qui existe, c'est pas tout a fait comme du bmp puisqu'il n'y a pas d'entete. tu dois connaiter les dimensiosns pour la lire. En fait, le fichier ne contient que les valeurs de chaque pixel (de 0 à 255) ...
Enfin, pour le seuillage, c'est pas tres complique, je pensais qu'en regardant la fonction, on pouvait deviner si on ne savait pas ... toutes les valeurs inférieures au seuil passent a 0 (noir) et toutes les autres passent a 255 (blanc)

signaler à un administrateur
Commentaire de hariseldon le 09/07/2003 10:11:41

cette source est extrèmement simple et efficace...

bravo

signaler à un administrateur
Commentaire de sidha2 le 25/03/2004 17:37:19

je vous remerice tres infiniment pour cette source, mais j'aimerai bien vous demander certains aclaircissements:
1- que signifie seuil (techniquement)?
2- en enregistrant l'image resultats je n'arrive pas a l'ouvrir avec un autre logiciel d'image, je dois l'enregistrer avec l'extension de format ou c'est fait par defaut? s'il y a une explication pour ça??
je vous serai tres reconnaissant , et excusez moi car je ne suis qu'un debutant dans ce domaine de programacion.
merci

signaler à un administrateur
Commentaire de payen le 25/03/2004 21:34:46

1. seuil : ca permet de creer une image binaire a partir d'une image en niveaux de gris. toutes les valeurs inferieures au seuil passent en noir (0), toutes les valeurs superieures au seuil deviennent blancs (255).
2. en enregistrant l'image, il faut rajouter l'extension ".raw", comme pour la lecture

d'autres questions ?

signaler à un administrateur
Commentaire de sidha2 le 26/03/2004 12:15:24

merci pour votre reponse.
j'ai appliqué votre conseil pour l'enregistrement des images mais resulte que les images n'ont pas été reconues par le logiciel de lecture d'images??
si'il y a une possibilité d'applique la meme chose mais pour des images bmp ou jpg et leur affichage directement toujours en c et non c++.
merci

signaler à un administrateur
Commentaire de payen le 26/03/2004 19:25:31

pour lire du raw, il fau utiliser photoshop. il y a surement d'autres logiciels qui font ca, mais je n'en connais pas. pour lire du bmp et du jpeg, il faut utiliser des librairies deja existantes. il doit y avoir qques codes dur le site pour te faciliter la vie

signaler à un administrateur
Commentaire de julllieee le 06/05/2004 11:33:56

bonjour,
je voulais juste savoir, je commence juste dans le traitement d'images et je n'ai pas fait d'etudes d'info, mais je cherche un code qui permet de transformer mes images.raw en image.pgm, pour que je puisse les traiter.
En tout cas le code de lecture et d'ecriture des .raw est tres bien, merci.
Si vous pouviez m'aider
merci d'avance
julie

signaler à un administrateur
Commentaire de julllieee le 06/05/2004 11:34:16

bonjour,
je voulais juste savoir, je commence juste dans le traitement d'images et je n'ai pas fait d'etudes d'info, mais je cherche un code qui permet de transformer mes images.raw en image.pgm, pour que je puisse les traiter.
En tout cas le code de lecture et d'ecriture des .raw est tres bien, merci.
Si vous pouviez m'aider
merci d'avance
julie

signaler à un administrateur
Commentaire de martinbrochet le 23/05/2005 17:03:51

bonne source merci

signaler à un administrateur
Commentaire de jbahans le 13/05/2006 16:20:47

Super code, simple, mais il fallait y penser, cela me servira beaucoup. Jérôme

signaler à un administrateur
Commentaire de Pistol_Pete le 12/04/2007 16:53:28

Salut,
Il faudrait que j'ouvre des fichiers raw 16 bits. Aussi, pour voir le résultat j'ai photoshop et je ne peux le lire l'image que quand je place l'option macintoch.(la seconde option étant IBM PC)
Est ce que tu connais la différence entre l'ouverture Macintoch et IBM PC?
Pour mon image, je la lis octet par octet en commencant par le MSB puis par le LSB. Cependant, cette image est largement plus bruité par rapport à ce que photoshop me donne.
Est ce que tu pourrais me l'expliquer?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.