CImg库【C++】

图像处理库CImg

CImg 是一个用C++编写的开源数字图像处理库。

作者介绍

作者David Tschumperlé, 之前是法国La Rochelle大学的一名教授,现受雇于CNRS 图像组。据说作者从1998年写博士论文时就开始写这个库。作者主页:http://www.greyc.ensicaen.fr/~dtschump/ ,里面有更多关于作者本人的消息。

库的特点

这个库与一般的类库最大的不同点在于,不像其他的图像处理类库,CImg所有的代码都包含在一个文件中(CImg.h)。库的设计使用了C++模板技术,支持多种数据类型,且库的设计机器简单明了。库包含了这几个模块:首先是CImg类,这是库的主体,基本上基于图像的操作都在这个类里实现了。第二个是CImgDisplay类,该类用于显示处理后的图像。我们在用c++处理图像时,总是要花好多功夫在图像的显示上,CImgDisplay的设计就是为解决这个问题而写的。有了它,我们可以像用Matlab一样方便的显示图像。第三个重要的类是CImgList该类主要为处理序列图像。

该库还有一个特点是可移植性,同时支持Windows和linux,FreeBSD等等。

该库支持多种图像格式的读取与保存,不过个人认为,除了bmp文件外,读取其他文件时都是先用ImageMagic的convert程序转换格式在读取,所以速度很慢。读取bmp文件很快。

 

如何使用

 

在该库发布的下载文件中包含了很多演示程序。要使用它,首先将下载下来的CImg.h文件拷贝到你的编译器搜索的include文件夹中,然后在源代码写上:

 

#include "CImg.h"
using namespace cimg_library;

 

就这么简单,你就可以使用所有的库函数。

下面是作者给的一个例子:

#include "CImg.h"
  using namespace cimg_library;

  int main() {
    CImg<unsigned char> 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.dimx()-1,y,0,0),red,1,255,0);
        visu.draw_graph(image.get_crop(0,y,0,1,image.dimx()-1,y,0,1),green,1,255,0);
        visu.draw_graph(image.get_crop(0,y,0,2,image.dimx()-1,y,0,2),blue,1,255,0).display(draw_disp);
        }
      }
    return 0;
  }

你可以直接将上面的源代码保存到一个.cpp文件然后编译查看效果。当然,在项目所在文件夹中必须包含有图片lena.jpg。

技术支持

该库有非常详细的文档说明随源代码一起发布。http://cimg.sourceforge.net/index.shtml 这是sourceforge上该项目的主页,有论坛,我觉得作者非常认真负责,经常在上面为网友解答问题,详细细致。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值