Quiero iterar sobre cada color de píxel en una imagen de formato jpg
,¿Cómo procesar imágenes jpg con c/C++ más fácilmente?
¿a qué biblioteca debo hacer referencia para hacer esto para que el código pueda ser lo más corto posible?
Quiero iterar sobre cada color de píxel en una imagen de formato jpg
,¿Cómo procesar imágenes jpg con c/C++ más fácilmente?
¿a qué biblioteca debo hacer referencia para hacer esto para que el código pueda ser lo más corto posible?
Puedo pensar en ImageMagick o . Aquí hay un CImg tutorial para usted. Extraen muchos de los detalles de descompresión y solo te dan una cuadrícula para trabajar.
Si va con CImg, solo necesita utilizar la llamada data. Probablemente pueda hacer algo como:
CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10); // get pointer to pixel @ 10,10
unsigned char pixel = *ptr;
jpeglib es una biblioteca bastante útil para jugar con jpegs.
Para acceder a la información de nivel de píxel. libjpeg & JAI Image I/O Tools debería ser suficiente. JAI proporciona un marco avanzado de procesamiento de imágenes más que esto. Todas las opciones le permiten leer/escribir píxeles en un archivo de imagen.
libjpeg En C/C++. Está disponible para Linux y Windows. Lo he usado en Linux antes y funciona bien. Sin embargo, si desea procesar otro tipo de imagen, puede necesitar obtener otro paquete y aprender otra interfaz API.
Java Advanced Imaging (JAI) La imagen de E/S Herramientas Recuerde que debe descargar el paquete de Java específico de la plataforma porque no hay optimización específica para los diferentes sistemas. Cubre no solo JPG sino también otro formato de imagen con la misma interfaz API.
Java Advanced Imaging (JAI) Si va a hacer el nivel más adelantado de procesamiento, tales como el uso de operador de la imagen y el filtro, puede utilizar esto. Este es un paquete que proporciona una funcionalidad de mayor nivel que JAI Image I/O Tools.
EDIT: para eliminar el 1, 2 & 3 como se sugiere
las respuestas no se muestran en ningún orden permanente, por lo que se refieren a otras las respuestas como # 1, # 2, # 3 son confusas. Es útil resumir la respuesta (aquí podría ser el nombre del marco) o nombrar el respondedor para identificar otras respuestas. Vincular las otras respuestas es aún mejor. –
@Ben Voigt: notado y gracias por compartir esta buena práctica. – ttchong
me gustaría utilizar Allegro Biblioteca juego http://liballeg.org/Allegro es fuente simple/abierta/libre/multiplataforma, y se puede repetir píxel por píxel si quieres
Qt tiene una clase QImage:
QImage i("input.jpg");
int x, y;
for (y = 0; < i.height(); ++y) {
for (x = 0; x < i.width(); ++x) {
doSomethingWith(i.pixel(x, y));
}
}
Sí, Qt es genial –
Trate FreeImage, parece bastante versátil y muchos proyectos de usarlo.
CImg es una buena biblioteca. Secundado. –
¿Cómo obtener el ancho y la altura? – user198729
Cambié el ejemplo para mostrar cómo recuperar el alto/ancho –