begin process at 2008 08 29 08:25:10
1 233 523 membres
62 nouveaux aujourd'hui
14 291 membres club

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é: 7 510 / 657

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

  • 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

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS