图像处理之图像直方图
发布时间
阅读量:
阅读量
目录
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)
还没有任何评论哟~
