Advertisement

图像处理之图像直方图

阅读量:

目录

1 图像直方图简介

2 图像直方图C语言代码实现

3 演示Demo

3.1 开发环境

3.2 功能介绍

3.3 下载地址

参考


1 图像直方图简介

图像直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素,即统计一幅图某个亮度像素数量。

图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。

也可以通过图像直方图来判断一张图像是否偏暗、偏亮或者光线正常,图像直方图的横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。

2 图像直方图C语言代码实现

复制代码
 /*************************************************

    
 功    能:图像直方图
    
 参    数:srcData  -    [输入/输出] 原始图像,格式为32位BGRA格式,执行后修为结果图像
    
       width    -   [输入] 原始图像宽度
    
       height   -   [输入] 原始图像高度
    
       stride   -   [输入] 原始图像的Stride(也就是行字节数width*4)
    
       hist     -   [输出] 直方图数据
    
       mode     -   [输入] 0-灰度直方图,1-R分量直方图,2-G分量直方图,3-B分量直方图
    
 返    回: 0-成功,其他-失败.
    
 *************************************************/
    
 int histagram(unsigned char *srcData, int width, int height, int stride, int hist[256], int mode)
    
 {
    
     int ret = 0;
    
     int i, j, gray, offset;
    
     offset = stride - width * 4;
    
     unsigned char* pSrc = srcData;
    
     switch (mode)
    
     {
    
     case 0://Gray histagram
    
             for (j = 0; j < height; j++)
    
             {
    
                     for (i = 0; i < width; i++)
    
                     {
    
                             gray = (pSrc[0] + pSrc[1] + pSrc[2]) / 3;
    
                             hist[gray]++;
    
                             pSrc += 4;
    
                     }
    
                     pSrc += offset;
    
             }
    
             break;
    
     case 1://Red histagram
    
             for (j = 0; j < height; j++)
    
             {
    
                     for (i = 0; i < width; i++)
    
                     {
    
                             hist[pSrc[2]]++;
    
                             pSrc += 4;
    
                     }
    
                     pSrc += offset;
    
             }
    
             break;
    
     case 2://Green histagram
    
             for (j = 0; j < height; j++)
    
             {
    
                     for (i = 0; i < width; i++)
    
                     {
    
                             hist[pSrc[1]]++;
    
                             pSrc += 4;
    
                     }
    
                     pSrc += offset;
    
             }
    
             break;
    
     case 3://Blue histagram
    
             for (j = 0; j < height; j++)
    
             {
    
                     for (i = 0; i < width; i++)
    
                     {
    
                             hist[pSrc[0]]++;
    
                             pSrc += 4;
    
                     }
    
                     pSrc += offset;
    
             }
    
             break;
    
     default:
    
             break;
    
     }
    
  
    
     return ret;
    
 };
    
    
    
    

3 演示Demo

3.1 开发环境

Windows 10 Pro x64

Visual Studio 2015

3.2 功能介绍

演示程序主界面如下图所示,具有图像读取、显示、保存、显示RGBA值、HSV调整、提取YUV分量、灰度化、二值化、直方图等功能。

灰度直方图

R分量直方图

G分量直方图

B分量直方图

3.3 下载地址

开发环境:

Windows 10 pro x64

Visual Studio 2015

下载地址:图像处理之图像直方图Demo

参考

图像视频滤镜与人像美颜美妆算法详解. 胡耀武、谭娟、李云夕. 电子工业出版社、2020-07

全部评论 (0)

还没有任何评论哟~