Buscar en este blog

Mostrando entradas con la etiqueta How to access to pixels of an image. Mostrar todas las entradas
Mostrando entradas con la etiqueta How to access to pixels of an image. Mostrar todas las entradas

miércoles, 6 de junio de 2007

¿Como acceder a los pixeles de una imagen?

El siguiente código muestra como acceder a los valores de pixel de una imagen. Se ha utilizado una imagen a color de 3 canales y 8 bits, que ha de ser transformada en una imagen (Figura 1a) en escala de grises de 8 bits mediante la función de Open CV cvCvtColor.

Figura 1a

Para mostrar el acceso a los valores de pixel, cada valor de pixel ha sido dividido entre 2, el resultado se observa en la Figura 1b.

Figura 1b
#include"cv.h"
#include"cxcore.h"
#include"cvaux.h"
#include"highgui.h"

uchar getPixel( IplImage*img, int lin, int col ) {
return ((uchar*)(img->imageData + img->widthStep*lin))[col] ;
}

void setPixel( IplImage*img, int lin, int col, uchar valor ) {
((uchar*)(img->imageData + img->widthStep*lin))[col] = valor ;
}


void main(){

char *nom_img[] = {".\img_grises.jpg", ".\img_div_pix.jpg"};

cvNamedWindow("Imagen Original", 1);
cvNamedWindow("Imagen Procesada", 1);
cvNamedWindow("Imagen Grises", 1);

IplImage *img1 = cvLoadImage(".\img_10.jpg");//img_10.jpg es una imagen a color de 3 canales y 8 bits

cvShowImage("Imagen Original", img1);

IplImage *img2 = cvCreateImage(cvSize(img1->width, img1->height), 8, 1);//direcciona un espacio en memoria para almacenar una imagen de las dimensiones de img1, con 8 bits y 1 canal

cvCvtColor(img1, img2, CV_BGR2GRAY);//transforma la imagen a color en una imagen a escala de grises de 1 canal y 8 bits

int x = img2->height;
int y = img2->width;
int canales = img2->nChannels;
int bits = img2->depth;

printf("Renglones = %d, Columnas = %d, Canales = %d, Bits = %d", x, y, canales, bits);
cvSaveImage(nom_img[0], img2); //quitar
cvShowImage("Imagen Grises", img2);

uchar val_pix;

for (int i=0; i"<"x; i++) {
for(int j=0; j"<"y; j++) {
val_pix = (getPixel(img2, i, j)) / 2;
setPixel(img2, i, j, val_pix);
}
}
cvSaveImage(nom_img[1], img2);//quitar
cvShowImage("Imagen Procesada", img2);

cvWaitKey(0);

cvDestroyWindow("Imagen Original");
cvDestroyWindow("Imagen Procesada");
cvDestroyWindow("Imagen Grises");
}