1. Prodotti
  2.   Immagine
  3.   C++
  4.   CImg
 
  

Libreria C++ open source per l'elaborazione di immagini

Applica filtri immagine, crea, manipola e renderizza formati di file di immagini popolari utilizzando l'API C++ gratuita.

CImg Library è una libreria open source che fornisce funzionalità utili per caricare, salvare, visualizzare e elaborare vari tipi di immagini all'interno di C++ applicazioni. Il CImg è una libreria molto leggera e facile da usare. La cosa buona è che evita di gestire dipendenze complesse e problemi di compatibilità biblioteca. E 'costituito da un singolo file di intestazione CImg.h che deve essere incluso nella tua C++ fonte. Aiuta gli sviluppatori eseguendo complesse attività di elaborazione delle immagini in poche righe di codice.

Il API supporta funzioni avanzate come la gestione di immagini 3D, Trasformare immagini, filtraggio di immagini, animazione di immagini, Binarization immagine, e altro ancora. CImg libreria è molto portatile e indipendente. Può essere facilmente utilizzato su diversi sistemi operativi con facilità. Inoltre, è anche molto compatibile con em numerosi C++ compilatori come /em Visual C++, CC, G, ecc.

Previous Next

Guida introduttiva a CImg

La biblioteca CImg è disponibile come pacchetto .zip che è indipendente dalla piattaforma. Contiene tutti i file richiesti, insieme a vari esempi, che mostrano come utilizzare le funzioni della libreria e le classi.

È necessario aggiungere queste due righe nel codice sorgente C++ per poter lavorare con CImg.

Aggiungi queste righe per il funzionamento di CImg

 #include "CImg.h" 
using namespace cimg_library 

Scarica l'ultima versione di CImg via Git

git clone --depth=1 https://github.com/GreycLab/CImg.git

API C++ per creare e modificare immagini

La libreria open source CImg consente agli sviluppatori C++ di creare e manipolare diversi tipi di immagini all'interno delle proprie applicazioni. Supporta anche come gestire la visualizzazione delle immagini e gli eventi del mouse. Prima di tutto, è necessario includere i file di intestazione principali e unici della libreria CImg. La cosa buona è che la libreria riduce il carico dello sviluppatore consentendo loro di scrivere una quantità molto piccola di codice. Si noti inoltre che il sorgente funzionerà perfettamente su sistemi UNIX e Windows.

Crea immagine tramite libreria C++

 #include "CImg.h"
using namespace cimg_library;
int main() {
  CImg image("lena.jpg"), visu(500,400,1,3,0);
  const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
  image.blur(2.5);
  CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile");
  while (!main_disp.is_closed() && !draw_disp.is_closed()) {
    main_disp.wait();
    if (main_disp.button() && main_disp.mouse_y()>=0) {
      const int y = main_disp.mouse_y();
      visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.width()-1,y,0,0),red,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,1,image.width()-1,y,0,1),green,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,2,image.width()-1,y,0,2),blue,1,1,0,255,0).display(draw_disp);
      }
    }
  return 0;
}

Supporto per il filtraggio delle immagini

CImg libreria fornisce il supporto per il processo di filtraggio delle immagini. A volte abbiamo bisogno di recuperare informazioni sulle immagini e questo è dove filtraggio Immagine è comunemente usato. Il processo di filtraggio delle immagini è uno dei metodi più comuni da applicare alle immagini per recuperare informazioni. Per lo più, i filtri vengono utilizzati nella rimozione del rumore dell'immagine, derivati dell'immagine del computer, miglioramento del bordo dell'immagine, analisi di forma e altro ancora.

Applicare filtraggio del corriere in C++ App

 void* item_fourier_filtering() {
  const CImg img = CImg(data_milla,211,242,1,3).RGBtoYCbCr().channel(0).resize(256,256);
  CImgList F = img.get_FFT();
  cimglist_apply(F,shift)(img.width()/2,img.height()/2,0,0,2);
  const CImg mag = ((F[0].get_pow(2) + F[1].get_pow(2)).sqrt() + 1).log().normalize(0,255);
  CImgList visu(img,mag);
  CImgDisplay disp(visu,"[#16] - Fourier Filtering (Click to set filter)");
  CImg mask(img.width(),img.height(),1,1,1);
  const unsigned char one[] = { 1 }, zero[] = { 0 }, white[] = { 255 };
  int rmin = 0, rmax = 256;
  while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) {
    disp.wait();
    const int
      xm = disp.mouse_x()*2*img.width()/disp.width() - img.width(),
      ym = disp.mouse_y()*img.height()/disp.height(),
      x = xm - img.width()/2,
      y = ym - img.height()/2;
    if (disp.button() && xm>=0 && ym>=0) {
      const int r = (int)std::max(0.0f,(float)std::sqrt((float)x*x + y*y) - 3);
      if (disp.button()&1) rmax = r;
      if (disp.button()&2) rmin = r;
      if (rmin>=rmax) rmin = std::max(rmax - 1,0);
      mask.fill(0).draw_circle(mag.width()/2,mag.height()/2,rmax,one).
        draw_circle(mag.width()/2,mag.height()/2,rmin,zero);
      CImgList nF(F);
      cimglist_for(F,l) nF[l].mul(mask).shift(-img.width()/2,-img.height()/2,0,0,2);
      visu[0] = nF.FFT(true)[0].normalize(0,255);
    }
    if (disp.is_resized()) disp.resize(disp.window_width(),disp.window_width()/2).display(visu);
    visu[1] = mag.get_mul(mask).draw_text(5,5,"Freq Min/Max = %d / %d",white,zero,0.6f,13,(int)rmin,(int)rmax);
    visu.display(disp);
  }
  return 0;
}
 Italiano