Come aprire e leggere i pixel di un'immagine in C++? Leggili sotto forma di X, Y e per conoscere il colore.Lettura di pixel dell'immagine in C++
risposta
Se avete intenzione di lavorare con le immagini si dovrebbe guardare nella libreria OpenCV, ha praticamente tutto hai bisogno di lavorare con le immagini.
OpenCV 2.0 è uscito un paio di mesi fa ed è molto amichevole con C++.
OpenCV è eccessivo per la sola lettura delle immagini. –
Sì, è una grande libreria, la sto solo ponendo come opzione se vuole fare altre cose oltre a leggere/scrivere sarebbe bello averne familiarità. – rem7
Utilizzare una libreria come DevIL (http://openil.sourceforge.net/). DevIL caricherà i dati dell'immagine in una matrice e potrai accedere ai dati grezzi dei pixel usando una funzione come ilGetPixels() o così.
DevIL ha anche il supporto OpenGL.
s/ilGetPixels()/ilGetData() –
I BMP sono incredibilmente semplici. I BMP non compressi sono costituiti da un'intestazione, alcune informazioni sul BMP, la tavolozza dei colori (se applicabile) e quindi i dati bitmap, pixel per pixel. Scrivere il tuo parser bitmap è un esercizio divertente, anche se c'è un sacco di lavoro extra che gestisce tutte le funzionalità (compressione a 8 bit, RLE, ecc.).
La soluzione migliore è utilizzare una libreria. Image Magick ha una libreria C che ti permetterà di aprire praticamente qualsiasi formato di immagine e accedere ai pixel. SDL_image è un'altra libreria che è molto facile da usare e SDL può essere facilmente utilizzato con OpenGL.
Quale formato di immagine è necessario utilizzare dipenderà dall'applicazione. I JPG hanno una compressione piuttosto buona, ma la compressione è LOSSY, il che significa che si perdono i dettagli. Se l'immagine ha un testo, o ha ampie aree di colori o bordi solidi (come un fumetto) questo è male, otterrai artefatti evidenti. Per le foto, i JPG sono generalmente soddisfacenti. I PNG sono una bella alternativa, sono compressi ma la compressione è LOSSLESS. I JPG saranno generalmente più piccoli dei PNG, entrambi saranno più piccoli dei BMP.
O si utilizza una libreria esistente o si scrive il proprio codice. In genere, il primo approccio è migliore poiché un formato di file di immagine è spesso più complesso di quanto sembri in superficie e, se non si presta attenzione, si può finire con immagini capovolte o con componenti di colore non corretti.
A seconda delle esigenze, potrebbe essere necessario prendere in considerazione anche le capacità del formato. Se il supporto per l'alta gamma dinamica è interessante, OpenEXR è un'ottima scelta, se non lo è probabilmente è solo scomodo in quanto non ha un grande supporto tra altri programmi come ad esempio PNG.
Qui ci sono due librerie spesso mi rivolgo a quando hanno bisogno di leggere e scrivere le immagini: libpng, OpenExr
Usiamo libpng per la generazione di immagini, è davvero facile da usare e puro codice C++ quindi non c'è bisogno di occuparsi di un'interfaccia crappy. –
@ Matthieu M .: libpng non è certamente scritto in "puro C++". È scritto in C89, come afferma nella pagina collegata a Laserallan. – unwind
Leggendo il colore di un pixel da un file immagine utilizzando il Magick++ biblioteca
#include <Magick++.h>
#include <iostream>
using namespace Magick;
using namespace std;
int main(int argc, char **argv) {
try {
InitializeMagick(*argv);
Image img("C:/test.bmp");
ColorRGB rgb(img.pixelColor(0, 0)); // ie. pixel at pos x=0, y=0
cout << "red: " << rgb.red();
cout << ", green: " << rgb.green();
cout << ", blue: " << rgb.blue() << endl;
}
catch (Magick::Exception & error) {
cerr << "Caught Magick++ exception: " << error.what() << endl;
}
return 0;
}
- 1. pixel di lettura Android da GL_TEXTURE_EXTERNAL_OES
- 2. Lettura pixel da OpenGL/GLUT Applicazione
- 3. Mostra pixel sullo schermo in C
- 4. Ottenere il colore del pixel in C++
- 5. Risultati popen lettura in C++
- 6. Lettura file CSV in C#
- 7. lettura notazione scientifica in C
- 8. Lettura file delimitati in C++
- 9. Come trovare la larghezza di stringa in C# (in pixel)
- 10. Lettura di documenti composti in C#
- 11. lettura/scrittura di file bmp in c
- 12. Lettura e scrittura di XML in C#
- 13. Proprietà di sola lettura in Objective-C?
- 14. Metodo più veloce di lettura di pixel dello schermo in Python rispetto a PIL?
- 15. Lettura di un file immagine in C/C++
- 16. C# crea file di lettura/scrittura da sola lettura
- 17. Perché utilizzare in sola lettura in C#
- 18. linux appunti in lettura/scrittura in C
- 19. C# UTF8 Lettura/emissione
- 20. WebGL Lettura di pixel da una virgola mobile in virgola mobile
- 21. CALayer: linea di pixel singolo assomiglia 2 pixel
- 22. Converti pixel in pollici e viceversa in C#
- 23. Converti formato pixel WriteableBitmap in Bgra32 in C# wpf
- 24. Lettura da un enorme MemoryStream in C#
- 25. Pixel C++ nella finestra della console
- 26. sola lettura proprietà in C# 6.0
- 27. "Sola lettura" Proprietà Accessor in C#
- 28. Lettura dalla porta seriale in C#
- 29. Lettura del dizionario C# in Javascript
- 30. la lettura da stdin in C++
Qualsiasi particolare formato di immagine? Diversi formati hanno diverse librerie. –
Quale formato è l'immagine? BMP? PNG? JPEG? –
Probabilmente JPG o BMP. Sarà estratto da openGL quindi non sono ancora sicuro. Importa? Se sì, quale è meglio? –