2011-02-05 14 views
5

Przede wszystkim jestem początkującym. W porządku?Praca z obrazami w C++ lub C

Czytałem pokrewnych odpowiedzi i pytania, ale proszę mi pomóc z tym problemem:

Jak mogę otworzyć plik obrazu JPEG w C++, przekształcić go w skali szarości, dostać jego histogram, zmiana rozmiaru go mniejszy obraz, przyciąć konkretny obszar lub pokazać konkretny obszar?

Dla tych zadań ogólnie jest C lub C++?

Jakie biblioteki są najprostsze i najszybsze? Czas działania jest bardzo ważny.

Dzięki.

Odpowiedz

7

tutaj jest przykładem przy użyciu biblioteki magick.

program, który odczytuje obraz, rośliny, i zapisuje go do nowego pliku (obsługa wyjątków jest opcjonalne, ale zalecane):

#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

Ty Szybko piszę! Prawie też miałem takie rozwiązanie. ;) – Paul

+0

Powodzenia następnym razem. :) – ayush

+0

naprawdę dziękuję za twoją przydatną odpowiedź. Podarunek: zbliża się przyjście mężczyzny, który zapewnia człowieka od wszystkich więzów. – mohammad

2

Istnieje wiele dobrych bibliotek do pracy z obrazami w C i C++, z których żaden nie jest wyraźnie lepszy od wszystkich innych. OpenCV wiki, project page ma świetne wsparcie dla niektórych z tych zadań, natomiast ImageMagick wiki, project page jest dobry w innych. Grupa JPEG ma również własną implementację funkcji przetwarzania JPEG. Są to prawdopodobnie dobre zasoby, od których można zacząć; Dokumentacja API może bardziej szczegółowo opisywać, w jaki sposób korzystać z każdego z nich.

Co do tego, czy biblioteki C lub C++ są z założenia szybsze, nie ma wyraźnego zwycięzcy między tymi dwoma. W końcu zawsze możesz skompilować bibliotekę C w C++. To powiedziawszy, biblioteki C++ wydają się być nieco trudniejsze do uchwycenia ze względu na złożoność języka, ale o wiele łatwiejsze w użyciu, gdy już dobrze opanujesz język. (Jestem nieco stronniczy w stosunku do C++, więc należy wziąć pod uwagę źródło). Poleciłbym wybrać język, który jest dla ciebie łatwiejszy; nie jest to również zły wybór, szczególnie jeśli wydajność jest ważna.

Powodzenia z projektem!

2

dobrze dla podstawowych manipulacji obrazów, które mogłyby również wypróbuj Qt's QImage (i inne). Zapewnia to podstawową funkcjonalność otwierania, skalowania, zmiany rozmiaru, przycinania, manipulacji pikselami i innych zadań.

W przeciwnym razie można, jak już wspomniano, korzystać z ImageMagick lub OpenCV. OpenCV zawiera wiele przykładów z nim do wielu zadań rozpoznawania obrazu manipulacja/image ...

Nadzieja to pomaga ...

1

libgd chodzi o najprostszy, roztwór najlżejszy wagi.

gdImageCreateFromJpeg 
gdImageCopyMergeGray 
gdImageCopyResized 

Och, i to wszystko C.