2010-11-02 4 views
1

Je souhaite lire un fichier bmp en niveaux de gris 8 bits, reconstruire sa matrice de pixels, puis le traiter avec l'opérateur sobel. Cependant, le programme ne peut pas construire de matrice de pixels, il divise les blocs de pitcure d'origine. Quand je cours le programme comme ça;
./sobel cube.bmp output.bmp processed.bmp output.txt
cube.bmp est l'entrée output.bmp est la sortie de la matrice de pixels construits. proccessed.bmp est la sortie de l'opérateur sobel traité.
Code and Sample photos
Problèmes de lecture d'un fichier bmp en niveaux de gris 8bit en c

+0

Je pense que la réponse réside dans la sortie de 'Print', qui est la seule chose que vous ne nous avez pas montré. –

Répondre

1

Quelques commentaires:

Votre processed.bmp a l'apparence d'un bitmap écrit avec une taille de ligne incorrecte ou la taille du pixel. Vous pouvez le dire, car chaque ligne est décalée horizontalement.

vous traitez bitmaps en niveaux de gris, mais vous êtes en train de lire et d'écrire des pixels comme si elles ont des composantes RVB, i.e. .:

pixelArray[i][j].red = pixel.red; 
pixelArray[i][j].green = pixel.green; 
pixelArray[i][j].blue = pixel.blue; 

Un pixel en niveaux de gris est une seule valeur de 8 bits.

+0

J'ai essayé la structure PIXEL avec une seule valeur char non signée. Rien ne change, toujours le même résultat – anarhikos

+0

L'accès aux pixels RVB n'est peut-être pas votre seul problème, mais c'est un problème. Vous devriez également regarder vos boucles de lecture/écriture - assurez-vous que vous ne sortez pas de la fin d'un de vos tableaux alloués. Incidemment, vous pouvez envisager d'allouer tous vos tableaux sous la forme d'un pointeur unique plutôt que d'un tableau de pointeurs alloués individuellement. – Seth

+0

De plus, vous pouvez également essayer simplement de lire le bitmap et de sortir le même bitmap. Une fois que cela fonctionne, revenez en arrière et ajoutez le code pour appliquer l'opérateur Sobel. – Seth

2

peut-être pas la réponse que vous cherchez, mais, jetez un oeil à OpenCV.

En supposant que vous vous intéressiez aux étapes du traitement de l'image, pas spécifiquement à la manipulation BMP, cette bibliothèque s'occupe de tous les fichiers d'entrée/sortie, d'affichage, etc. pour vous. Il a aussi un bon filtre sobel.

+0

Utiliser OpenCV semble ici utiliser une fusée Saturn pour grimper à un arbre. – Seth

+0

@seth - true mais si l'OP s'intéresse aux filtres d'image, déconner avec les alignements d'en-têtes BMP revient à concevoir votre propre échelle pour grimper un arbre ;-) –

Questions connexes