Biblioteka Open Source do szybszego przetwarzania obrazów dla C++
Twórz, manipuluj, rysuj, dziel, kopiuj i konwertuj popularne formaty obrazów; Zastosuj filtry, podziel dwa obrazy, podziel obraz na siatkę za pomocą bezpłatnej biblioteki C++.
libvips to zaawansowana biblioteka do przetwarzania obrazów typu open source, która wykorzystuje bardzo mało pamięci i wykonuje bardzo szybkie operacje. Biblioteka może z łatwością obsługiwać duże obrazy i obsługuje przyzwoity zakres formatów plików graficznych, takich jak JPEG, TIFF, PNG, WebP, HEIC, FITS, Matlab, OpenEXR, PDF, SVG, HDR, PPM/PGM/PFM, CSV, GIF , Analizuj, NIfTI, DeepZoom i OpenSlide. Może łatwo ładować obrazy za pośrednictwem ImageMagick lub GraphicsMagick, co pozwala na pracę z formatami takimi jak DICOM.
Prymitywy libvips są stosowane rozsądnie, a niektóre techniki użycia, takie jak generowanie kodu w czasie wykonywania, pomagają przyspieszyć przetwarzanie obrazów. W porównaniu z innymi bibliotekami do przetwarzania obrazu, libvips potrzebują mało pamięci RAM i działają szybciej, szczególnie na maszynach z wieloma procesorami. Wynika to głównie z inteligentnej architektury, którą wykorzystuje, która automatycznie dzieli przepływy pracy z obrazami.
Biblioteka zapewnia obsługę ogromnego zakresu typów numerycznych, od prostego 8-bitowego typu int do złożonego 128-bitowego. Większość bibliotek przetwarzania obrazu używa operacji wątkowych, ale libvips z drugiej strony umieszcza wątki w systemie IO obrazu i przypisuje kopię całego potoku obrazu do każdego wątku do pracy nad nim. Ten poziomy styl wątkowania lepiej wykorzystuje pamięci podręczne procesora i zmniejsza blokowanie.
Biblioteka libvips to biblioteka do przetwarzania obrazów, która oferuje lepszą wydajność niż wiele innych bibliotek. Biblioteka zapewniła obsługę kilku ważnych funkcji przetwarzania obrazu, takich jak rysowanie obrazów, dzielenie dwóch obrazów, rysowanie okręgu na obrazie, kopiowanie obrazu, malowanie obrazu na inny obraz, rysowanie linii na obrazie, rzutowanie obrazu, pamięć podręczna obraz, dodaj dwa obrazy, stwórz obraz gaussowski, odczytaj punkt z obrazu, siadaj obraz, zapisz obraz do pliku JPEG i wiele więcej.
Pierwsze kroki z libvips
Sklonuj najnowsze źródła za pomocą następującego polecenia.
Zainstaluj libvips za pomocą polecenia git
git clone git://github.com/libvips/libvips.git
Budowanie z git wymaga więcej pakietów, będziesz potrzebować przynajmniej gtk-doc i gobject-introspection.
Zainstaluj pakiety libvips za pomocą polecenia git
./autogen.sh
make
sudo make install
Szybsze renderowanie obrazów za pomocą C++ API
Biblioteka libvips zapewnia funkcjonalność umożliwiającą szybsze tworzenie i manipulację obrazami na wszystkich wiodących platformach. Niektóre z wiodących bibliotek do przetwarzania obrazów, takie jak ImageMagick i GD, są bardzo wydajne i zapewniają zaawansowane funkcje do pracy z obrazami, ale wymagają dużej ilości pamięci do przetwarzania obrazów. Z drugiej strony, libvips może wykonywać praktycznie te same czynności, co ImageMagick, ale znacznie szybciej i przy stosunkowo niewielkim zużyciu pamięci
Zapisz obraz w innych obsługiwanych formatach
Biblioteka libvips o otwartym kodzie źródłowym zawiera zestaw operacji, które ładują i zapisują obrazy w różnych formatach. Biblioteka zawiera wbudowaną obsługę zapisywania obrazów w popularnych formatach, takich jak TIFF, JPEG, PNG, Analyze, PPM, OpenEXR, CSV, Matlab, Radiance, RAW, FITS, WebP, SVG, PDF, GIF i VIPS. VipsForeign może być używany do ładowania i zapisywania obrazów w różnych formatach.
Odczytuj i zapisuj obrazy w pamięci za pomocą C++ API
int
main( int argc, char **argv )
{
gchar *buf;
gsize len;
int i;
if( VIPS_INIT( argv[0] ) )
vips_error_exit( NULL );
if( argc != 2 )
vips_error_exit( "usage: %s FILENAME", argv[0] );
if( !g_file_get_contents( argv[1], &buf, &len, NULL ) )
vips_error_exit( NULL );
for( i = 0; i < 10; i++ ) {
VipsImage *image;
void *new_buf;
size_t new_len;
printf( "loop %d ...\n", i );
if( !(image = vips_image_new_from_buffer( buf, len, "",
"access", VIPS_ACCESS_SEQUENTIAL,
NULL )) )
vips_error_exit( NULL );
if( vips_image_write_to_buffer( image,
".jpg", &new_buf, &new_len,
"Q", 95,
NULL ) )
vips_error_exit( NULL );
g_object_unref( image );
g_free( new_buf );
}
g_free( buf );
vips_shutdown();
return( 0 );
}
Szybsza zmiana rozmiaru obrazu
Biblioteka libvips o otwartym kodzie źródłowym daje programistom możliwość zmiany rozmiaru obrazów w locie w ich własnych aplikacjach. Najpierw musisz załadować obraz z repozytorium obrazów, podając nazwę obrazu i pełny adres. Następnie możesz zmienić jego rozmiar do określonej szerokości i wysokości zgodnie z własnymi potrzebami. Następnie możesz zapisać wybraną lokalizację z nowym rozmiarem.
Odczytuj i zapisuj obrazy w pamięci za pomocą C++ API
int
vips_resize( VipsImage *in, VipsImage **out,
double scale, ... )
{
va_list ap;
int result;
va_start( ap, scale );
result = vips_call_split( "resize", ap, in, out, scale );
va_end( ap );
return( result );
}
Filtrowanie obrazów przez C++ API
Filtrowanie obrazu to cenna funkcja wykorzystywana w różnych aplikacjach do przetwarzania obrazu i wizji komputerowych na całym świecie. Biblioteka libvips zapewnia pełną obsługę filtrowania obrazów za pomocą poleceń C++. Funkcje takie jak wygładzanie, wyostrzanie i uwydatnianie krawędzi to tylko niektóre przykłady operacji przetwarzania obrazu zaimplementowanych z filtrowaniem. Biblioteka zawierała również filtry PNG, takie jak różnica do lewej, średnia z lewej i do góry, adaptacyjne, automatyczne wybieranie najlepszego przewidywania sąsiada i brak filtrowania. Zawiera również filtry importu, które można ładować za pomocą libMagick i OpenSlide.