Təsvir Emalı üçün Açıq Mənbəli C++ Kitabxanası

Pulsuz C++ API istifadə edərək Şəkil Filtrlərini Tətbiq edin, Populyar Şəkillər fayl formatlarını yaradın, manipulyasiya edin və göstərin.

CImg Kitabxanası C++ proqramlarında müxtəlif növ şəkilləri yükləmək, saxlamaq, göstərmək və emal etmək üçün faydalı funksiyaları təmin edən açıq mənbəli kitabxanadır. CImg çox yüngül və istifadəçi dostu kitabxanadır. Yaxşısı odur ki, o, mürəkkəb asılılıqlar və kitabxana uyğunluğu problemlərindən qaçır. O, C++ mənbəyinə daxil edilməli olan tək başlıq faylı CImg.h-dən ibarətdir. O, bir neçə kod sətirində mürəkkəb təsvirin işlənməsi fəaliyyətlərini yerinə yetirməklə tərtibatçılara kömək edir.

API 3D şəkillərlə işləmə, şəkillərin dəyişdirilməsi, təsvirin filtrasiyası, təsvir animasiyası, Şəkil Binarizasiyası və s. kimi qabaqcıl xüsusiyyətləri dəstəkləyir. CImg kitabxanası çox portativdir və müstəqildir. Müxtəlif əməliyyat sistemlərində asanlıqla istifadə edilə bilər. Üstəlik, o çoxsaylı C++ kompilyatorları ilə də çox uyğun gəlir, məsələn, Visual C++, ICC, G++ və s.

Previous Next

CImg ilə işə başlamaq

CImg Kitabxanası platformadan asılı olmayan .zip paketi kimi mövcuddur. O, kitabxananın funksiyalarından və siniflərindən necə istifadə olunacağını göstərən müxtəlif nümunələrlə yanaşı, bütün tələb olunan faylları ehtiva edir.

CImg ilə işləyə bilmək üçün bu iki sətri C++ mənbə kodunuza əlavə etməlisiniz.

CImg işi üçün bu sətirləri əlavə edin

 #include "CImg.h" 
using namespace cimg_library 

Git vasitəsilə CImg-in Ən Son Versiyasını əldə edin

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

Şəkillər yaratmaq və dəyişdirmək üçün C++ API

CImg açıq mənbə kitabxanası C++ tərtibatçılarına öz proqramlarında müxtəlif növ şəkillər yaratmağa və manipulyasiya etməyə imkan verir. O, həmçinin görüntü ekranı və siçan hadisələrini idarə etməyi dəstəkləyir. Əvvəlcə CImg kitabxanasının əsas və yeganə başlıq fayllarını daxil etməlisiniz. Yaxşısı odur ki, kitabxana çox az miqdarda kod yazmağa imkan verməklə tərtibatçının yükünü azaldır. Mənbənin UNIX və Windows sistemlərində mükəmməl işləyəcəyini də nəzərə alın.

C++ kitabxanası vasitəsilə Şəkil yaradın

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

Şəkil Filtrləmə Dəstəyi

CImg kitabxanası təsvirin filtrlənməsi prosesi üçün dəstək verir. Bəzən biz şəkillər haqqında məlumat əldə etməliyik və burada Şəkil filtrindən çox istifadə olunur. Şəkil filtrləmə prosesi məlumat əldə etmək üçün şəkillərə tətbiq edilən ən ümumi üsullardan biridir. Əsasən, filtrlər təsvirin səs-küyünün aradan qaldırılmasında, kompüter təsvirinin törəmələrində, təsvirin kənarının təkmilləşdirilməsində, Forma təhlilində və s. istifadə olunur.

C++ Proqramlarında Fourier Filtrləmə tətbiq edin

 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;
}
 Azəri