2011-02-05 41 views
5

Lo primero es que soy un principiante. ¿Bueno?Trabajando con imágenes en C++ o C

He leído respuestas y preguntas relacionadas, pero por favor me ayude con este problema:

¿Cómo puedo abrir un archivo de imagen JPEG en C++, convertirlo en una imagen en escala de grises, obtener su histograma, cambiar su tamaño para una imagen más pequeña, recortar un área particular de ella, o mostrar un área particular de ella?

Para estas tareas, ¿es C o C++ más rápido en general?

¿Qué bibliotecas son las más simples y rápidas? El tiempo de ejecución es muy importante.

Gracias.

Respuesta

7

aquí hay un ejemplo usando la biblioteca magick.

programa que lee una imagen, cultivos, y lo escribe en un archivo nuevo (el manejo de excepciones es opcional pero muy recomendado):

#include <Magick++.h> 
#include <iostream> 
using namespace std; 
using namespace Magick; 
int main(int argc,char **argv) 
{ 
    // Construct the image object. Seperating image construction from the 
    // the read operation ensures that a failure to read the image file 
    // doesn't render the image object useless. 
    Image image; 

    try { 
    // Read a file into image object 
    image.read("girl.jpeg"); 

    // Crop the image to specified size (width, height, xOffset, yOffset) 
    image.crop(Geometry(100,100, 100, 100)); 

    // Write the image to a file 
    image.write("x.jpeg"); 
    } 
    catch(Exception &error_) 
    { 
     cout << "Caught exception: " << error_.what() << endl; 
     return 1; 
    } 
    return 0; 
} 

check many more examples here

+0

Usted ¡estoy escribiendo rápido! Casi tuve esta solución también. ;) – Paul

+0

mejor suerte la próxima vez. :) – ayush

+0

realmente gracias por su respuesta útil. Como una donación: está a punto de venir un hombre que afirman humanos de todas las esclavitudes. – mohammad

2

Hay muchas buenas bibliotecas para trabajar con imágenes en C y C++, ninguna de las cuales es claramente superior a todas las demás. OpenCV wiki, project page tiene un gran soporte para algunas de estas tareas, mientras que ImageMagick wiki, project page es bueno en otros. El grupo JPEG también tiene su propia implementación de funciones de procesamiento JPEG. Estos son probablemente buenos recursos para comenzar; la documentación API puede guiarlo más específicamente sobre cómo usar cada uno de estos.

En cuanto a si las bibliotecas C o C++ van a ser más rápidas, no hay un ganador claro entre las dos. Después de todo, siempre puedes compilar una biblioteca C en C++. Dicho esto, las bibliotecas C++ tienden a ser un poco más difíciles de recoger debido a la complejidad del lenguaje, pero son mucho más fáciles de usar una vez que tienes una buena idea del idioma. (Estoy un poco predispuesto hacia C++, así que asegúrese de considerar la fuente). Recomiendo ir con el idioma que le resulte más fácil para la tarea; tampoco es una mala elección, especialmente si el rendimiento es importante.

¡La mejor de las suertes con su proyecto!

2

bien para la manipulación de imágenes básicas que podrían también pruebe la clase QImage de Qt (y otra). Esto le brinda funcionalidad básica para abrir, escalar, redimensionar, recortar, manipular píxeles y otras tareas.

De lo contrario, como ya se dijo, puede usar ImageMagick u OpenCV. OpenCV ofrece una gran cantidad de ejemplos con que para muchas tareas de reconocimiento de imágenes manipulación/imagen ...

creo que sirve ...

1

libgd se trata de la solución más fácil, más ligera.

gdImageCreateFromJpeg 
gdImageCopyMergeGray 
gdImageCopyResized 

Oh, y todo es C.