Bibliothèque C++ open source pour le traitement d'images

Appliquez des filtres d'image, créez, manipulez et rendez des formats de fichiers d'images populaires à l'aide de l'API C++ gratuite.

CImg La bibliothèque est une bibliothèque de sources ouvertes qui fournit des caractéristiques utiles pour le chargement, l'épargne, l'affichage et le traitement de divers types d'images dans C++ applications. Le CImg est une bibliothèque très légère et conviviale. Il est bon d'éviter de traiter des dépendances complexes et des questions de compatibilité des bibliothèques. Il s'agit d'un seul fichier CImg.h qui doit être inclus dans votre source. Elle aide les développeurs en exécutant des activités complexes de traitement d'images dans quelques lignes de code.

Les API appuie des caractéristiques avancées comme la manipulation d'images 3D, la transformation d'images, le filtrage d'image, l'animation d'image, la binisation d'images et plus. CImg bibliothèques sont très mobiles autonomes. Il peut être facilement utilisé sur différents systèmes d'exploitation avec facilité. De plus, elle est également très compatible avec les C++ compilateurs, tels que /em Visual C++, CC, G, etc.

Previous Next

Premiers pas avec CImg

La CImg Bibliothèque est disponible sous forme de paquet .zip qui est indépendant de la plateforme. Il contient tous les fichiers requis, ainsi que divers exemples, qui montrent comment utiliser les fonctions et les classes de la bibliothèque.

Vous devez ajouter ces deux lignes dans votre code source C++, afin de pouvoir travailler avec CImg.

Ajoutez ces lignes pour que CImg fonctionne

 #include "CImg.h" 
using namespace cimg_library 

Obtenir la dernière version de CImg par Git

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

API C++ pour créer et modifier des images

La bibliothèque open source CImg permet aux développeurs C++ de créer et de manipuler différents types d'images dans leurs propres applications. Il prend également en charge la gestion des événements d'affichage d'image et de souris. Tout d'abord, vous devez inclure les fichiers d'en-tête principaux et uniques de la bibliothèque CImg. La bonne chose est que la bibliothèque réduit la charge du développeur en lui permettant d'écrire une très petite quantité de code. Veuillez également noter que la source fonctionnera parfaitement sur les systèmes UNIX et Windows.

Créer l'image par C++ bibliothèques

 #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;
}

Prise en charge du filtrage d'images

CImg bibliothèques appuient le processus de filtrage des images. Parfois, nous devons extraire de l’information sur les images et c’est là que le filtrage d’image est couramment utilisé. Le processus de filtrage de l'image est l'une des méthodes les plus courantes pour s'appliquer aux images pour extraire l'information. Les filtres sont surtout utilisés pour l'élimination du bruit d'image, les dérivés d'images informatiques, l'amélioration des bords d'image, l'analyse du profil et plus.

Appliquer un filtrage de messagerie dans C++ Apps

 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;
}
 Français