Ir ao conteúdo
  • Cadastre-se

Manipulação de Bitmap - Problema com alocação e utilização da matriz alocada


silviorp

Posts recomendados

Pessoal, tenho que terminar esse trabalho e não me caiu muito bem a ficha da utilização de ponteiros e alocamento de memória. Minha função para aplicar o filtro de Sobel num Bitmap não está compilando porque dá o seguinte erro:

539 C:\Users\SILVIO\Desktop\NOVO4\trabalho.c.c invalid operands to binary *

O código da minha função é o seguinte:

*PS: Quando eu declaro a matriz memória, é "mem" ali e não memória.. o fórum tá mudando automaticamente.

void sobelFilter(FILE* inputFile, FILE* outputFile, int rows, int cols)
{
int i, j, k;
unsigned int X, Y;
int I, J;
long dx, dy;
int S;
int GX[3][3];
int GY[3][3];

/* 3x3 GX Mascara de Sobel */
GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1;
GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2;
GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1;

/* 3x3 GY Mascara de Sobel */
GY[0][0] = 1; GY[0][1] = 2; GY[0][2] = 1;
GY[1][0] = 0; GY[1][1] = 0; GY[1][2] = 0;
GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1;

/* DECLARANDO E ALOCANDO MEMORIA PARA A MATRIZ QUE GUARDARA A IMAGEM INICIAL */
unsigned char ****v; //vetor de ponteiros
v = (unsigned char ****)calloc(rows, sizeof(unsigned char***)); //Alocação dinamica do vetor
//Lendo do arquivo de entrada e colocando em um vetor
fseek(inputFile, 54, SEEK_SET);//Apontando para a inicio da imagem
for (i = 0 ;i<rows; i++){
v[i] = (unsigned char ***)calloc(cols, sizeof(unsigned char **));
for (j = 0 ;j<cols ; j++){
v[i][j] = (unsigned char **)calloc(3,sizeof(unsigned char*));
for (k = 0 ; k<3 ; k++){
v[i][j][k] = (unsigned char* )calloc(1,sizeof(unsigned char*));
fread(v[i][j][k], 1, 1, inputFile);

}
}
}

/* DECLARANDO E ALOCANDO MEMORIA PARA A MATRIZ QUE GUARDARA A IMAGEM FINAL */
unsigned char ****memória//vetor de ponteiros
memória (unsigned char ****)calloc(rows, sizeof(unsigned char***)); //Alocação dinamica do vetor
//Lendo do arquivo de entrada e colocando em um vetor
for (i = 0 ;i<=rows; i++){
mem[i] = (unsigned char ***)calloc(cols, sizeof(unsigned char **));
for (j = 0 ;j<cols ; j++){
mem[i][j] = (unsigned char **)calloc(3,sizeof(unsigned char*));
for (k = 0 ; k<3 ; k++){
mem[i][j][k] = (unsigned char* )calloc(1,sizeof(unsigned char*));
}
}
}
/*---------------------------------------------------
ALGORITMO DE SOBEL COMEÇA AQUI
---------------------------------------------------*/
for(i=0; i<rows; i++) {
for(j=0; j<cols; j++) {
for(k=0; k<0; k++){
dx = 0;
dy = 0;

/* image boundaries */
if(i==0 || i==rows)
S = 0;
else if(j==0 || j==cols)
S = 0;

/* Convolution starts here */
else
{
dx =
v[i-1][j-1][k]*GX[0][0] +
v[i ][j-1][k]*GX[1][0] +
v[i+1][j-1][k]*GX[2][0] +
v[i-1][j+1][k]*GX[0][2] +
v[i ][j+1][k]*GX[1][2] +
v[i+1][j+1][k]*GX[2][2];

if(dx>255) dx=255;
if(dx<0) dx=0;

dy =
v[i-1][j-1][k]*GX[0][0] +
v[i-1][j ][k]*GX[0][1] +
v[i-1][j+1][k]*GX[0][2] +
v[i+1][j-1][k]*GX[2][0] +
v[i+1][j ][k]*GX[2][1] +
v[i+1][j+1][k]*GX[2][2];

if(dy>255) dy=255;
if(dy<0) dy=0;

S = sqrt(pow(dx, 2) + pow(dy, 2));
}
mem[i][j][k] = S;
}
}
}



/* -----------ESCREVENDO A NOVA IMAGEM NO ARQUIVO DE SAIDA----------*/
fseek(outputFile, 54, SEEK_SET); //Apontando para a inicio da imagem do arquivo de saida
for (i=0 ; i<cols; i++){
for (j=0 ; j<rows; j++){
for (k = 0 ; k<3 ; k++){
fwrite(mem[i][j][k], 1, 1, outputFile);
}
}
}

}

Alguem me dá uma luz!! Dá esse erro quando na parte da convolução.

Valeu ae!!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...