Problema con imagenes digitales en C++ y QT

JoseTlaseca
28 de Mayo del 2008
Hola a todos.
Ojala y puedan ayudarme con un problema que tengo y no se como solucionarlo:

Estoy trabajando con imagenes digitales en c++ con qt y hay una parte de mi codigo que me marca violacion de segmento, lo unico que quiero hacer hasta ahora es guardar el promedio ponderado de los canales de una imagen en una matriz de pixeles... les explico (solo pongo las partes de codigo que se ven involucradas):

Tengo unas declaraciones asi:

//En un archivo .h
//Matriz en la que se van a guardar los pixeles de la imagen original
unsigned char **matrizImagen;

//Apuntador al inicio de la imagen a pintar, para modificar los canales con el polinomio de direcc.
unsigned char *pixelImagen;

int rowstride;


******************************

//en un archivo .cpp

//Reservar memoria para la matriz de pixeles

matrizImagen = new unsigned char*[imageAlto];
//imageAlto vale 480
for(int i=0 ; i < imageAlto ; i++)
matrizImagen[i]=new unsigned char[imageAncho];
//imageAncho vale 640


rowstride = imageImagen->bytesPerLine(); //bytesPerLine es parte de qt y devuelve un entero que es el num de bytes por linea en una imagen

pixelImagen = imageImagen->bits();
//en imageImagen hay una imagen de tipo QImage

//la parte donde llamo a la susodicha funcion es:
//guardo imagen original en matriz
llenarMatrizOriginal( imageAlto, imageAncho, pixelImagen, matrizImagen, rowstride );

*******************************

//El cuerpo de la funcion es el siguiente:

void seguimiento::llenarMatrizOriginal( int alto, int ancho, unsigned char *imagePixelPointer, unsigned char **matriz, int rowstride )
{
float alpha, beta, gamma;
alpha=0.2125;
beta=0.7154;
gamma=0.0721;
unsigned char *indice;
int R, G, B;

unsigned char temp;

for(int i=0; i<alto; i++)
for(int j=0; j<ancho; j++)
{
indice = imagePixelPointer + (i* rowstride) + (j * 4);
B = (*indice); indice++;
G = (*indice); indice++;
R = (*indice);
//LA SIGUIENTE ES LA LINEA QUE ME DA PROBLEMAS
//LO SE PORQUE SI LA PONGO COMO COMENTARIO NO ME
// DA EL ERROR DE VIOLACION DE SEGMENTO
matriz[i][j] = (unsigned char)(alpha*( R)+beta*( G)+gamma*( B ));
}
}


//por ultimo en el destructor de la clase libero la memoria de la matriz:

for(int x=0; x< imageAlto; x++)
delete[] matrizImagen[x];

delete[] matrizImagen;
matrizImagen=NULL;


*************************

Si cambio en la asignacion matriz[i][j] por alguna otra variables, por ejemplo un entero, como a continuacion:

temp = (unsigned char)(alpha*( R)+beta*( G)+gamma*( B ));//temp de tipo int

ya no me da el error... en resumen el problema esta en esa asignacion... pero yo no lo veo....

Alguno me puede ayudar?