[计算机视觉] CImg库绘制图像灰度直方图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33000225/article/details/62044486

做计算机视觉Computer Vision作业时候要用CImg库(即CImg.h头文件),需要绘制图像的灰度直方图。网上搜索了一下貌似都没找到相关的链接,只好屁颠屁颠的打开5w多行的CImg.h查看,谁知看着看着就发现,原来CImg库有自带的绘制图像灰度直方图的方法!!!


先po一下效果图吧:



其实各位也可以直接打开CImg.h,搜索:histogram ,就能找到该方法了。如果嫌麻烦可以往下看~


主要使用代码:

CImg<int> histImg = GrayImg.histogram(256, 0, 255);
histImg.display_graph("Histogram", 3);

代码解释:

1、CImg<...> 的template类型最好用int。(用unsigned char的直方图会出奇怪的问题)

2、GrayImg同为CImg<int>类似,但是必须注意的是:如果仅仅做灰度图的直方图,GrayImg必须以下面的方式创建:

CImg<int> GrayImg = CImg<int>(width, height, 1, 1, 0);
      第4个参数必须为1,说明图像只有一个通道。如果该参数设为3,再读取一幅灰度图时,函数会默认图像为彩色图像(即3个通道, 只是3个通道的灰度值都一样),从而会每个通道都统计一次,导致最后的直方图所有灰度的像素个数都是原来的3倍。(虽然 这样对整个灰度图趋势没影响~)

3、img.histogram(const unsigned int nb_levels, const T& min_value, const T& max_value)方法

      第1个参数为灰度级别(这里是 统计256个灰度级别);第2、3个参数为灰度最小值和最大值,本来可以缺省,但是缺省的话出来的直方图会出问题(看了下应该是这个函数的统计方法造成的),所以最好还是按照上面这样写

4、仅用上面这一行代码做不出上面图那样的效果,还要调用CImg的绘图方法绘制display_graph

    (该方法也可以在CImg.h里搜到)。第一个参数是显示直方图的窗口的title;第二个是int类型,代表图像样式plot_type,这里的3代表是条形(对于0:点状;1:segments;2:样条曲线)。当然这个方法还要很多缺省参数,可以自行查看CImg.h。




猜你喜欢

转载自blog.csdn.net/qq_33000225/article/details/62044486
今日推荐