Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    2

    Elaborazione immagine in c

    Ragazzi ho bisogno di una mano... Ho il seguente codice c
    #include <stdio.h>
    #include <stdlib.h>
    #include "math.h"

    //globali
    int rows,cols,masksize;
    unsigned char **img1,**img2,**img3,**img_o,**img_o2,**img_o3;
    double **doublemask;
    char **charmask;
    char a[64],b[64];

    //dichiarazioni funzione
    unsigned char** allocabuffer(int r, int c);
    void eliminabuffer(unsigned char **buffer,int r);
    void readraw(char *filepath,unsigned char **buffer);
    void saveraw(char *filepath,unsigned char **buffer);
    double MSE(unsigned char **buffer1, unsigned char **buffer2);

    double* hist(unsigned char **buffer,char *filepath);
    void stretch(unsigned char **buffer);
    void threshold(unsigned char **buffer, int th);
    void equalize(unsigned char **buffer);
    void makechess(unsigned char **buffer);
    void makecircles(unsigned char **buffer);
    void put_watermark(unsigned char **buffer,unsigned char **watermark);
    unsigned char** get_watermark(unsigned char **buffer);


    FILE *out;


    main()
    {

    //setup
    int i,j,t,frames,frame;
    char a[255],c[255],path[1024];
    int** intbuffer;
    int rowsi,colsi,rowsh,colsh;
    rows=512; cols=512;
    //rows=480; cols=512;
    //rows=400; cols=480;
    //rows=1024; cols=1024;
    //rows=324; cols=524;
    //rows=300; cols=300;
    //rows=16; cols=16;
    //rows=256; cols=256;
    //rows=255; cols=260;
    //rows=240; cols=320;
    //rows=288; cols=384;
    //rows=144; cols=192;
    //rows=144; cols=176;
    //rows=80; cols=80;
    //rows=473; cols=599;
    img1=allocabuffer(rows,cols);
    img2=allocabuffer(rows,cols);
    img3=allocabuffer(rows,cols);

    -------------------
    //test RGB
    rows=240; cols=320;
    readrawRGB("D:\\DIEE\\Didattica\\x_images\\misc corso\\Cinescopio_320_240_RGBinter.raw",img1,img2, img3);
    saveraw("R.raw",img1);
    saveraw("G.raw",img2);
    saveraw("B.raw",img3);
    img_o=allocabuffer(rows,cols);
    RGB2Y(img1,img2,img3,img_o);
    saveraw("Y.raw",img_o);
    eliminabuffer(img_o,rows); //*/

    //cleanbuffs
    eliminabuffer(img1,rows);
    eliminabuffer(img2,rows);
    eliminabuffer(img3,rows);
    }


    Ho una immagine da elaborare e devo:
    Data l’immagine peppers_512x512x24.raw (512x512 pels, 24bpp RGB interlacciati):
    1. scrivere una funzione per aprire correttamente l’immagine e salvare separatamente 3
    immagini dei canali R, G e B.
    2. estrarre la componente Y (luminanza) come definita dalla trasformata adottata dal JPEG e
    salvare la relativa immagine.
    3. Calcolare l’istogramma a colori (canali R, G, B) e della componente Y e plottarli su un
    unico grafico.
    Come posso fare per risolvere questo esercizio?
    stavo pensando di copiare i canali su 3 buffer distinti uno r uno g e uno b con la stessa risoluzione dell immagine con 8 bit per pixel, poi costruire un nuovo buffer per costruire la componente y attraverso la trasformazione spaziale (tramite la matrice)... e poi applicare la funzione istogramma ai 4 buffer creati... è corretto? qualcuno saprebbe darmi una mano sul codice da creare? non son molto pratico...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Scrivi il codice usando l'apposito tag CODE (#), e usando la corretta indentazione, altrimenti è impossibile leggerlo e analizzarlo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    2
    codice:
    #include<stdio.h>
    #include<malloc.h>
    
    int rows=512,cols=512;
    unsigned char **img1,**imgR,**imgG,**imgB;
    
    unsigned char** allocabuffer(int r, int c);
    void eliminabuffer(unsigned char **buffer,int r);
    void readraw(char *filepath,unsigned char **buffer);
    void readrawR(char *filepath,unsigned char **buffer);
    void readrawG(char *filepath,unsigned char **buffer);
    void readrawB(char *filepath,unsigned char **buffer);
    void saveraw(char *filepath,unsigned char **buffer);
    
    FILE *out;
    
    main() 
    {
    	int i;
    	
        imgR=allocabuffer(rows, cols);
       	
        readrawR("C:\Documents and Settings\Paolo L\Desktop\EIV\img.raw\img.raw",imgR);
    
        saveraw("C:\Documents and Settings\Paolo L\Desktop\EIV\img.raw\img_R.raw",imgR);
    
        eliminabuffer(imgR,rows);
       }
    
    unsigned char** allocabuffer(int r, int c)
    {
    	int i;
    	unsigned char **buffer=(unsigned char**)malloc(r*sizeof(unsigned char*));
    	for(i=0;i<r;i++)
    		buffer[i]=(unsigned char*)calloc(3*c,sizeof(unsigned char));
    	return (buffer);
    }
    
    // readraw RGB
    void readrawR(char *filepath,unsigned char **buffer)
    {
    	int i;
    	out=fopen(filepath,"rb");
    	for(i=0;i<rows*cols*3;i=i+3) fread(buffer[i],1,1,out);
    	fclose(out);
    }
    
    void readrawG(char *filepath,unsigned char **buffer)
    {
    	int i;
    	FILE *source=fopen(filepath,"rb");
    	for(i=1;i<rows;i=i+3) fread(buffer[i],1,cols,source);
    	fclose(source);
    }
    
    void readrawB(char *filepath,unsigned char **buffer)
    {
    	int i;
    	FILE *source=fopen(filepath,"rb");
    	for(i=2;i<rows;i=i+3) fread(buffer[i],1,cols,source);
    	fclose(source);
    }
    
    void eliminabuffer(unsigned char **buffer,int r)
    {
    	int i;
    	for(i=0;i<r;i++) free(buffer[i]);
    	free(buffer);
    }
    
    void saveraw(char *filepath,unsigned char **buffer)
    {
    	int i;
    	FILE *source=fopen(filepath,"wb");
    	for(i=0;i<rows;i++) fwrite(buffer[i],1,1,source);
    	fclose(source);
    }
    Adesso è corretto, questo file dovrebbe aprire l immagine che ho in raw e salvare in un buffer tutte le componenti R del file raw... il file si compila ed esegue senza alcun problema, ma non mi crea alcuna immagine raw con solo le componenti R del file raw...come devo fare per risolvere questo problema... inoltre devo fare la stessa cosa per estrarre G e B... non cè una procedura + semplice?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.