Görüntü İşleme için Açık Kaynak C++ Kitaplığı
Ücretsiz C++ API'sini kullanarak Görüntü Filtreleri uygulayın, Oluşturun, İşleyin ve Popüler Görüntüler dosya formatlarını Oluşturun.
CImg Kütüphane, C++ uygulama içinde çeşitli görüntüleri görüntülemek, görüntülemek, görüntülemek ve işlemek için yararlı özellikler sağlayan açık bir kaynak kütüphanesidir. CImg çok hafif ve kullanıcı dostu bir kütüphanedir. İyi olan şey, karmaşık bağımlılıkları ve kütüphane uyumluluk sorunlarını kullanmaktan kaçınmaktır. C++ kaynağınıza dahil edilmesi gereken tek bir başlık dosyasından yapılır. Geliştiricilere sadece birkaç kod satırında karmaşık görüntü işleme faaliyetleri yaparak yardımcı olur.
API, 3D görüntülerini işlemek, görüntüleri dönüştürmek, görüntü filtreleme, görüntü animasyonu, Image Binarization ve daha fazlası gibi gelişmiş özellikleri destekler. CImg kütüphane çok taşınabilir ve kendi kendine özgüdür. Kolaylıkla farklı işletim sistemlerinde kolayca kullanılabilir. Ayrıca, Visual C++, CC, G++ vb. gibi çok uyumlu.
CImg'ye Başlarken
CImg Kütüphane, platform bağımlı olan .zip paketi olarak mevcuttur. Tüm gerekli dosyaları içerir, çeşitli örneklerle birlikte, kütüphane işlevlerini ve sınıfları nasıl kullanacağınızı gösterir.
CImg ile çalışabilmek için bu iki satırı C++ kaynak kodunuza eklemeniz gerekir.
CImg çalışması için bu satırları ekleyin
#include "CImg.h"
using namespace cimg_library
En son CImg versiyonunu Git
git clone --depth=1 https://github.com/GreycLab/CImg.git
Görüntüleri Oluşturmak ve Değiştirmek için C++ API
CImg açık kaynak kitaplığı, C++ geliştiricilerinin kendi uygulamaları içinde farklı türde görüntüler oluşturmasına ve değiştirmesine olanak tanır. Ayrıca, görüntü gösterimi ve fare olaylarının nasıl ele alınacağını da destekler. Her şeyden önce, CImg kitaplığının ana ve yalnızca başlık dosyalarını eklemeniz gerekir. İyi olan şey, kütüphanenin geliştiricinin yükünü çok az miktarda kod yazmasına izin vererek azaltmasıdır. Lütfen kaynağın UNIX ve Windows sistemlerinde mükemmel şekilde çalışacağını da unutmayın.
Resim Oluşturun C++ kütüphane
#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;
}
Görüntü Filtreleme Desteği
CImg kütüphane görüntü filtreleme süreci için destek sağlar. Bazen görüntüler hakkında bilgi almak zorundayız ve Image filtrelemenin yaygın olarak kullanıldığı yer. Görüntü filtreleme süreci, bilgi almak için resimlere başvurmak için en yaygın yöntemlerden biridir. Çoğu zaman, filtreler görüntü gürültü çıkarılması, bilgisayar görüntü türevleri, görüntü kenar geliştirme, Şekil analizi ve daha fazlası olarak kullanılır.
C++ Uygulamada Courier Filtreleme
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;
}