| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
vicentrp
Registrado: 14 Feb 2007 Mensajes: 25
| Publicado: 04/09/2007 9:40 am | | | Título: promdio de una imagen |
| hola que tal sigo en busca de programa que lea una imagen "imagen.raw" y que le saque un promedio a los pixeles que tengan valor positivo.. y despues me arroje el promedio de estas en una archivo "salida.txt" aqui envio el codigo para que me puedan ayudar.. gracias.. vicente
| Código: | #include<stdio.h> #include<fcntl.h> #include<dos.h> #include<math.h> #include<stdlib.h> #include<string.h> #include<fstream.h> #include<iostream.h> int main() { char imagen1[80]; float imag[80][80]; float prom; int i,j,nfil,ncol; float cont1,cont2; ifstream imagin("imagen.raw"); ofstream imagout("salida.txt"); cout<<"entra el numero de Filas"<<"\n"; cin>>nfil; cout<<"entra el numero de Columnas"<<"\n"; cin>>ncol; for(i=0;i<nfil;i++) for(j=0;j<ncol;j++)
cont1=0.0; cont2=0.0; for(i=0;i<nfil;i++) {for(j=0;j<ncol;j++) if(imag[i][j]>0) { cont1=imag[i][j]+cont1; cont2=cont2+1.0; } } prom=cont1/cont2; cout<<"el promedio es:"<<"\n"; imagout<<" "<<prom; system("pause"); return 0; }
|
|
| | Volver arriba | |  | david_celta
Registrado: 02 Jun 2005 Mensajes: 45
| Publicado: 04/09/2007 12:25 pm | | | Título: |
| Cita textual: Formato RAW "Básicamente el formato se compone de una cabecera, la paleta y el cuerpo o bitmap de la imagen, aunque esta estructura no es estándar. Cada usuario puede hacer variantes cambiando los datos de la cabecera de la forma que más le favorezca para su propósito, o incluso puede prescindir de ella si se conocen de antemano los datos de la imagen"
Ahora el programa...
cout<<"entra el numero de Filas"<<"\n"; cin>>nfil; cout<<"entra el numero de Columnas"<<"\n"; cin>>ncol; for(i=0;i<nfil;i++) for(j=0;j<ncol;j++) /*Supongo que aqui va algunas lineas más de código para ingresar el valor de cada pixel*/
Si lo que quieres hacer es ingresar una matriz de pixeles (que representarían al archivo RAW, donde cada numerito que ingresas sería un píxel) lo que estás haciendo debería funcionar correctamente:
int cont1,cont2; cont1=0; cont2=0; for(i=0;i<nfil;i++) for(j=0;j<ncol;j++) if(imag[i][j]>0) { cont1=imag[i][j]+cont1; cont2++; }
prom=(float)cont1/cont2; cout<<"el promedio es:"<<"\n"; imagout<<" "<<prom;
Y con eso tendrías tu promedio de pixeles positivos.
Ahora, si lo que quieres es leer un archivo RAW (osea que el programa lea el formato RAW con cabecera, paleta y pixeles) tel faltaría un poco más de código (para leer cabecera, paleta de colores y píxeles) y leer más sobre los archivos RAW |
| | Volver arriba | |  | david_celta
Registrado: 02 Jun 2005 Mensajes: 45
| Publicado: 04/09/2007 12:53 pm | | | Título: |
| Para leer la cabecera y la paleta necesitas saber cuantos bytes ocupa cada una.
Por ejemplo si el caso fuera leer un bit map:
# include <windows.h> # include <string.h> # include <stdio.h> # include <io.h> # include <stdlib.h>
int matrizPixeles[3][80][80];
int originalBMP (const char fruta[]) { char ruta[50]; strcpy(ruta,fruta); char bmpOrigen[50]; int color,x=0,y=0;
//informacion de cabeceras y paleta BITMAPFILEHEADER encabezadoImagen; BITMAPINFOHEADER informacionEncabezadoImagen;
FILE * imagenInicial; strcpy (bmpOrigen, ruta); imagenInicial = fopen (bmpOrigen, "rb");
if (imagenInicial) { fread (&encabezadoImagen,sizeof (encabezadoImagen),1,imagenInicial); fread (&informacionEncabezadoImagen,sizeof(informacionEncabezadoImagen),1,imagenInicial);
int ancho = informacionEncabezadoImagen.biWidth; int alto = informacionEncabezadoImagen.biHeight;
while (!feof (imagenInicial)) { for (int j = 0;j < 3; j ++) /* R+G+B */ { color = (int)fgetc (imagenInicial); if(x<ancho) { matriz[j][x][y]=color; x++; } else { x=0; y++; matriz[j][x][y]=color; x++; } }
fclose (imagenInicial);
return 1; } return 0; }
En este caso debes de saber que los pixeles de un bmp son 3 colores por pixel (un pixel=RGB(R,G,B))
Las estructura que ves arriba estan en la biblioteca windows.h
En este caso tendrias un arreglo tridimensional con los valores numericos de cada pixel, tambien puedes tener 3 arrgelos bidimensionales o incluso un solo arreglo, depende de como lo utilices (TODOS los valores numericos de estos pixeles son positivos, de 0 a 255 para cada pixel si el bitmap es de 24 bits)
Dado que no conozco el formato RAW no puedo decir si este tiene o no tiene pixeles negativos, también deberas averiguar eso |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |