1. Produtos
  2.   Imagem
  3.   C++
  4.   CImg
 
  

Biblioteca C++ de código aberto para processamento de imagens

Aplique filtros de imagem, crie, manipule e renderize formatos de arquivo de imagens populares usando a API C++ gratuita.

CImg A biblioteca é uma biblioteca de código aberto que oferece recursos úteis para carregar, salvar, e processar vários tipos de imagens dentro de C++ aplicações. O CImg é uma biblioteca muito leve e amigável. O bom é que evita com dependências complexas e problemas de compatibilidade com bibliotecas. É feito de um único arquivo de cabeçalho CImg.h que deve ser na sua C++ fonte. Ajuda os desenvolvedores desenvolvendo atividades complexas de de imagens em apenas algumas de código.

Os API recursos como manipulação de imagens 3D, Transformando imagens, filtragem de imagem, de imagem, Binarização de imagem e muito mais. CImg biblioteca é muito portátil e auto-contido. Ele pode ser facilmente usado em diferentes sistemas operacionais com. Além disso, também é muito com em numerous C++ compiladores, como /em Visual C++, CC, G, etc.

Previous Next

Introdução ao CImg

A CImg Biblioteca está disponível como.zip que é independente da plataforma. Ele todos os arquivos, juntamente com vários, que como usar as e classes da biblioteca.

Você precisa adicionar essas duas linhas em seu código-fonte C++ para poder trabalhar com CImg.

Adicione estas linhas para o funcionamento do CImg

 #include "CImg.h" 
using namespace cimg_library 

a versão mais recente de CImg via Git

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

API C++ para criar e modificar imagens

A biblioteca de código aberto CImg permite que os desenvolvedores de C++ criem e manipulem diferentes tipos de imagens dentro de seus próprios aplicativos. Ele também suporta como lidar com eventos de exibição de imagem e mouse. Antes de tudo, você precisa incluir os principais e únicos arquivos de cabeçalho da biblioteca CImg. O bom é que a biblioteca reduz a carga do desenvolvedor, permitindo que eles escrevam uma quantidade muito pequena de código. Observe também que a fonte funcionará perfeitamente em sistemas UNIX e Windows.

Criar Imagem através da biblioteca 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;
}

Suporte para filtragem de imagens

CImg biblioteca suporte para o processo de filtragem de imagem. s vezes recuperar informações sobre imagens e é aí que a filtragem de imagens é usada. O processo de filtragem de imagem é um dos mais comuns para se às imagens para recuperar informações. Na maioria das vezes, os filtros são na do ruído da imagem, derivados da imagem, da borda da imagem, análise da forma e muito mais.

Aplicar Courier Filtering em 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;
}
 Português