¿Cómo abrir y leer los píxeles de una imagen en C++? Léelos en forma de X, Y y para conocer el color.Lectura de píxeles de la imagen en C++
Respuesta
Si usted va a estar trabajando con imágenes que usted debe buscar en la biblioteca OpenCV, que tiene prácticamente todo necesitas trabajar con imágenes
OpenCV 2.0 salió hace un par de meses y es muy amigable con C++.
OpenCV es exagerado solo por leer imágenes. –
Sí, es una gran biblioteca, solo lo estoy poniendo como una opción si quiere hacer otras cosas además de leer/escribir sería bueno familiarizarse con eso. – rem7
Utilice una biblioteca como DevIL (http://openil.sourceforge.net/). DevIL cargará los datos de la imagen en una matriz y podrá acceder a los datos de píxel sin procesar usando una función como ilGetPixels() más o menos.
DevIL también tiene soporte para OpenGL.
s/ilGetPixels()/ilGetData() –
BMP son increíblemente simples. Las BMP sin comprimir constan de un encabezado, cierta información sobre el BMP, la paleta de colores (si corresponde) y luego los datos del mapa de bits, píxel por píxel. Escribir su propio analizador de mapas de bits es un ejercicio divertido, aunque hay mucho trabajo extra manejando todas las características (8 bits, compresión RLE, etc.).
Su mejor opción es usar una biblioteca. Image Magick tiene una biblioteca C que le permitirá abrir casi cualquier formato de imagen y acceder a los píxeles. SDL_image es otra biblioteca que es muy fácil de usar y SDL se puede usar fácilmente con OpenGL.
Qué formato de imagen debe utilizar dependerá de la aplicación. Los JPG tienen una compresión bastante buena, pero la compresión es PÉRDIDA, lo que significa que pierdes detalles. Si la imagen tiene texto, o tiene áreas grandes de colores sólidos o bordes (como un cómic), esto es malo, obtendrá un artefacto notable. Para las fotos, los JPG generalmente están bien. Los PNG son una buena alternativa, están comprimidos pero la compresión es SIN PÉRDIDA. Los JPG generalmente serán más pequeños que los PNG, ambos serán más pequeños que los BMP.
O utiliza una biblioteca existente o escribe su propio código. En general, el primer enfoque es mejor, ya que un formato de archivo de imagen suele ser más complejo de lo que parece en la superficie y puede terminar con imágenes al revés o un orden incorrecto de componentes de color si no tiene cuidado.
Dependiendo de sus requisitos, es posible que también necesite tomar las capacidades del formato en consideración. Si el soporte para un alto rango dinámico es interesante, OpenEXR es una gran opción, si no lo es, probablemente sea un inconveniente, ya que no cuenta con un soporte tan grande entre otros programas como, por ejemplo, PNG.
Aquí hay dos bibliotecas que a menudo recurren a cuando se necesita para leer y escribir imágenes: libpng, OpenExr
Usamos libpng para la generación de imágenes, es muy fácil de usar y un código C++ puro, así que no hay necesidad de lidiar con una interfaz cutre. –
@Matthieu M .: libpng ciertamente no está escrito en "puro C++". Está escrito en C89, como lo indica en la página enlazada por Laserallan. – unwind
Leyendo el color de un píxel de un archivo de imagen utilizando la biblioteca Magick++
#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. Lectura de un archivo de imagen en C/C++
- 2. Lectura de una imagen PNG en Node.js
- 3. Lectura de un archivo de imagen PNG en .Net 2.0
- 4. Lectura de caracteres desde la imagen
- 5. cómo especificar tamaño de la imagen en píxeles
- 6. java con buffer de imagen: La detección de píxeles negros
- 7. Pantalla de píxeles en la pantalla en C
- 8. Java ¿Loop a través de los píxeles en una imagen?
- 9. píxeles de la cámara girados
- 10. Programación de píxeles continúa
- 11. WebGL - lectura de los datos de píxeles de rendir memoria intermedia
- 12. coordenadas de píxeles en diamante
- 13. Lectura de PDF en C#
- 14. Lectura de gml en C#
- 15. Intentando extraer valores de píxeles de una imagen PNG determinada
- 16. Eficacia del sombreado de píxeles suma de todos los píxeles
- 17. Píxeles de dibujo en WPF
- 18. Django seguimiento de píxeles
- 19. Lectura de la configuración de la aplicación predeterminada en C#
- 20. ¿Cómo agregar 20 píxeles de blanco en la parte superior de un archivo de imagen existente?
- 21. Imagen WPF, cambiando el color de los píxeles
- 22. Editar valores de píxeles
- 23. Cómo escalar píxeles en una imagen para ajustar el brillo?
- 24. cómo encontrar la posición de píxeles de la imagen de sprite
- 25. C# TextWriter, permite la lectura de archivos:
- 26. Lectura de la userAgent con C#
- 27. Contar píxeles 'blancos' en la imagen binaria de opencv (de manera eficiente)
- 28. Lectura de datos de DataGridView en C#
- 29. C# copiar pegar una región de imagen en otra imagen
- 30. Imagen dentro de la celda de la célula rompiendo el diseño. +3 píxeles
cualquier formato de imagen en particular? Los diferentes formatos tienen diferentes bibliotecas. –
¿Qué formato es la imagen? BMP? PNG? JPEG? –
Probablemente JPG o BMP. Se extraerá de openGL, así que aún no estoy seguro. ¿Importa? Si es así, ¿cuál es mejor? –