begin process at 2012 02 09 07:33:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :11 116 / 776

Auteur : payen

Ecrire un message privé
Commentaire sur cette source (13)
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi
Source avec Zip Source avec une capture XCOUPE : COUPE 2D par pop70

Commentaires et avis

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!)

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)

Commentaire de hariseldon le 09/07/2003 10:11:41

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

bravo

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

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 ?

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

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

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

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

Commentaire de martinbrochet le 23/05/2005 17:03:51

bonne source merci

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

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?

Commentaire de aliale le 24/12/2010 19:46:37

wxcwx

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 0,421 sec (4)

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