Comment manipuler une image au niveau du pixel en C?
Comment lire une image en C afin que je puisse avoir un contrôle direct sur ses pixels (comme nous le faisons dans MATLAB)?
J'ai essayé à l'ancienne:
FILE *fp;
fp = fopen("C:\\a.tif","r");
qui me donne juste le ascii
forme de fichier image (je pense).
Comment puis-je obtenir pixels de niveau de contrôle sur l'image et faire quelques opérations de base comme, disons, de l'inversion de l'image?
C est un peu plus faible niveau que vous semblez le penser il est. Que fopen est de vous donner binaires brutes, et c'est à vous de comprendre comment l'interpréter en binaire comme une image, ou d'utiliser une bibliothèque comme indiqué ci-dessous.
il a spécifiquement demandé comment décoder ces fichiers, pas le contenu binaire. Je pense que C est une meilleure option si vous voulez que votre programme pour être rapide, d'autre Python fournit PIL qui est assez bon.
Que
Mais sur Linux et UNIX, il est très bien.
il n'a pas, il a demandé comment manipuler les pixels, comme il le fait dans matlab. Je n'ai jamais utilisé matlab, mais je soupçonne que c'est de haut niveau, assez pour ne pas forcer l'utilisateur à décoder des données binaires brutes en une image. Je suis simplement observer que C est pas que le haut niveau, et il ne comprend pas les images sans bibliothèque, ou sans l'écriture d'un programme pour décoder le binaire compressé de l'information dans les données de pixel. @Lutz, ah oui je suppose qu'il a besoin d'un "b" drapeau ou quelque chose? Je n'étais pas au courant que C fait la distinction entre le texte et binaire.
il a spécifiquement demandé comment décoder ces fichiers, pas le contenu binaire. Je pense que C est une meilleure option si vous voulez que votre programme pour être rapide, d'autre Python fournit PIL qui est assez bon.
Que
fopen()
vous donne pas de telles données binaires brutes, c'est de vous donner le mode texte, ce qui signifie qu'il est susceptible de lire certains fichiers correctement sur Windows.Mais sur Linux et UNIX, il est très bien.
il n'a pas, il a demandé comment manipuler les pixels, comme il le fait dans matlab. Je n'ai jamais utilisé matlab, mais je soupçonne que c'est de haut niveau, assez pour ne pas forcer l'utilisateur à décoder des données binaires brutes en une image. Je suis simplement observer que C est pas que le haut niveau, et il ne comprend pas les images sans bibliothèque, ou sans l'écriture d'un programme pour décoder le binaire compressé de l'information dans les données de pixel. @Lutz, ah oui je suppose qu'il a besoin d'un "b" drapeau ou quelque chose? Je n'étais pas au courant que C fait la distinction entre le texte et binaire.
OriginalL'auteur Moeb | 2009-10-20
Vous devez vous connecter pour publier un commentaire.
OpenCV est la vision par ordinateur de la bibliothèque, mais peut être utilisé pour de "bas niveau" tâches trop. Il supporte les formats BMP, DIB, JPEG, JPG, JPE, PNG, jpg, PBM, PGM, PPM, SR, AR, TIFF, TIF.
OriginalL'auteur Harriv
Ont un coup d'oeil à libtiff. Presque tous les formats d'image ont une certaine forme de données d'en-tête et nombreux sont compressées afin de garder la taille de fichier raisonnable. Vous pouvez bien sûr écrire du code C pour lire les en-têtes et effectuer une décompression, mais il n'est pas nécessaire, puisque quelqu'un d'autre l'a déjà fait. Regarder ici pour certains C de l'image des bibliothèques.
Une autre question est quelle forme vous souhaitez que les données pour la manipulation - un choix commun est de 24-bit RGB (c'est à dire R, G, et B varie de 0 à 255). Dans MATLAB, vous voyez aussi R, G, B doubles, variant de 0,0 à 1,0. Ou vous voudrez peut-être une couleur différente de l'espace (HSV, YUV, etc.).
Rappelez-vous que les opérations sur entiers sont plus rapides, mais ils peuvent être plus gênant.
OriginalL'auteur Artelius
À manipuler jpeg l'utilisation des fichiers libjpeg, le tiff l'utilisation des fichiers libtiff, etc.
Une autre option facile est gd qui permet la manipulation de nombreux formats d'images (PNG, JPEG, GIF, ...).
OriginalL'auteur Xolve
Il y a quelques open-source libs pour charger des images de différents types et de libtiff pour charger des images au format tiff. Si vous voulez juste jouer et le format de fichier n'est pas très important, alors je voudrais prendre un coup d'oeil sur netpbm format (enparticulier P5 et P6). Il est assez facile d'écrire un chargeur et de veille pour elle et bien sûr un bon exercice.
OriginalL'auteur quinmars
MagickWand de ImageMagick est une autre bonne option
OriginalL'auteur Lou Franco