Προς το περιεχόμενο

Image processing


MauriDalia

Προτεινόμενες αναρτήσεις

:-D

 

Geia se olous!!!

Thelw na ftiaksw ena programma gia thn ektelesh 2 metasxhmatismwn eikonas ton median kai ton sobel se C.prin apo auto omws,tha prpei na xehsimopoihsw 2 domes..

Mia pou onomazetai pixel_t kai apothikeuei tis xrwmatikes apoxrwseis gia ta 3 vasika xrwmata thn opoia exw orisei ws eksis

 

struct pixel_t {

byte Blue;

byte Green;

byte Red;

};

 

kai mia domi image_t pou tha anaparista mia eikona sumfwna me to protupo PPM.Epipleon h eikona mou pou tha epeksergastw tha apothikeyetai se ena disdiastato pinaka sthn domi image_t kai tha xei san stoixeia pixel_t.

 

struct image_t {

printf("P3\n");

int width_max;

int height_max;

printf("%d %d\n",width_max,height_max);

printf("To euros ths xrwmatikhs apoxrwshs einai 255\n");

pixel_t IMAGE[height_max][width_max];

for(i==0;i<height_max;i++)

{

for(j=0;j<width_max;j++)

{

 

IMAGE[j]=pixel_t *pixel_data;

IMAGE[j]=fputc((char)red,stdout);

IMAGE[j]=fputc((char)green,stdout);

IMAGE[J]=fputc((char)blue,stdout);

}

}

};

 

 

Ekei pou kolaei einai pws tha valw xrwma sto pixel...Logika prpei na xw kapoio lathos.Skeftika na orisw kapou Enan pinaka estw Pixel_value sto opoio tha apothikeuw thn timi gia xrwma tou kathe pixel.:confused::confused::confused:Kamia idea?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το format εικόνων PPM το είχα χρησιμοποιήσεις πριν πολλά χρόνια σε ορισμένες DOS εφαρμογές καθώς ήταν αυτό που λέμε “Quick and Dirty solution” για την αναπαράσταση ορισμένων μικρών εικόνων δίχως να μπλέξω με την αποκωδικοποίηση άλλων πιο περίπλοκων formats.

 

Τώρα σχετικά με το ερώτημα σου, καταρχήν μελέτησε λίγο την δομή των PPM αρχείων και ειδικά εκείνων που ανήκουν στον τύπο “P3” (raw PPM) από εδώ: http://netpbm.sourceforge.net/doc/ppm.html

 

Ακολουθεί ένα πολύ απλό C πρόγραμμα (compiled με CodeGear Turbo C++ Explorer) που δημιουργεί ένα PPM P3 (32x32) με δυο λευκά Pixels, το ένα στην αριστερή κορυφή του και το άλλο στην δεξιά βάση του.

 

>
/*-RAW PPM Write Demo-(c)'Directx-------------------------------------------*/

#include <stdio.h>
#include <string.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif

/*--------------------------------------------------------------------------*/
#define _MAX_PPM_COLOR 255  /* <256 => 1 byte for each pixel else 2 bytes */
#define _PPM_WIDTH 32
#define _PPM_HEIGHT 32

#ifdef __BORLANDC__
#pragma argsused
#endif
int main(int argc, char* argv[])
{
struct
 {
	char cSignature[3];
	int Width, Height;
 }image_t;
struct
 {
	unsigned char Red, Green, Blue;
 }pixel_t[_PPM_HEIGHT][_PPM_WIDTH];

FILE *Stream = NULL;
int nWidth, nHeight;

if((Stream=fopen("TEST.PPM","wt"))==NULL)
	printf("Cannot create PPM file!\n");
else
 {
	/*
	 * Setup a raw (P3) PPM header ...
	 */
	memset(&image_t,0,sizeof(image_t));
	strcpy(image_t.cSignature,"P3");
	image_t.Width = _PPM_WIDTH;
	image_t.Height= _PPM_HEIGHT;	

	/*
	 * Initialize raw PPM pixels ...
	 */
	memset(&pixel_t,0,sizeof(pixel_t));

	/*
	 * Dump raw PPM header ...
	 */
	fprintf(Stream,"%s\n",image_t.cSignature);
	fprintf(Stream,"%d\n",image_t.Width);
	fprintf(Stream,"%d\n",image_t.Height);
	fprintf(Stream,"%d\n",_MAX_PPM_COLOR);

	/*
	 * Set the Left-most top pixel and Right-most bottom pixel to White..
	 */
	pixel_t[0][0].Red = pixel_t[0][0].Green = pixel_t[0][0].Blue = 255;
	pixel_t[_PPM_HEIGHT-1][_PPM_WIDTH-1].Red= 
	pixel_t[_PPM_HEIGHT-1][_PPM_WIDTH-1].Green= 
	pixel_t[_PPM_HEIGHT-1][_PPM_WIDTH-1].Blue= 255;		
	 
	/*
	 * Dump raw PPM pixels ...
	 *
	 * Format: 3 Bytes = 1 Pixel - delimiter (to easy human reading) \t = tab character
	 *		   Row divider - newline (\n)
	 */
	for(nHeight=0;nHeight<_PPM_HEIGHT;nHeight++)
	 {
		for(nWidth=0;nWidth<_PPM_WIDTH;nWidth++)
		 {
			fprintf(Stream,"%d %d %d\t",pixel_t[nHeight][nWidth].Red,
										pixel_t[nHeight][nWidth].Green,
										pixel_t[nHeight][nWidth].Blue);
		 }
		fputc('\n',Stream);
	 }

	fclose(Stream);
 }

return 0;
}	

 

Υ.Γ.

Το πρόγραμμα μπορεί να περιέχει bugs ή άλλες αβλεψίες.

Η εικόνα δοκιμάσθηκε με το IrfanView 4.00

 

Καλή συνέχεια.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...