广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现BMP图像处理(直方图均衡化)
  • 870
分享到

C语言实现BMP图像处理(直方图均衡化)

2024-04-02 19:04:59 870人浏览 八月长安
摘要

本文实例为大家分享了C语言实现BMP图像直方图均衡化处理的具体代码,供大家参考,具体内容如下 计算步骤: 1)统计各灰度值的概率; 2)计算了累积概率直方图(CDF); 3)取整扩展

本文实例为大家分享了C语言实现BMP图像直方图均衡化处理的具体代码,供大家参考,具体内容如下

计算步骤:

1)统计各灰度值的概率;

2)计算了累积概率直方图(CDF);

3)取整扩展:Tk = int[ (L-1)*Tk];


#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int main(int* arGC, char** argv)
{
 FILE* fp = fopen("./01.bmp", "rb");
 if (fp == 0)
  return 0;
 BITMAPFILEHEADER fileHead;
 fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);
 
 BITMapiNFOHEADER infoHead;
 fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp);
 int width = infoHead.biWidth;
 int height = infoHead.biHeight;
 int biCount = infoHead.biBitCount;
 
 int lineByte = (biCount*width / 8 + 3) / 4 * 4;
 RGBQUAD* pColorTable;
 pColorTable = new RGBQUAD[256];
 fread(pColorTable, sizeof(RGBQUAD), 256, fp);
 
 unsigned char* pBmpBuf;
 pBmpBuf = new unsigned char[lineByte*height];
 fread(pBmpBuf, lineByte*height, 1, fp);
 fclose(fp);
 
 // 统计概率
 double st[256] = { 0 };
 int st1[256] = { 0 };
 int t;
 for (int i = 0; i < height; ++i){
  for (int j = 0; j < width; ++j){
   t = *(pBmpBuf + i*lineByte + j);
   st[t]++;
  }
 }
 // 计算累加直方图并完成映射
 st[0] = st[0] / (width*height);
 st1[0] = round(double((256 - 1)*st[0]));
 for (int i = 1; i < 256; ++i){
  st[i] = st[i] / (width*height);
  st[i] = st[i] + st[i - 1];
  st1[i] = int(round(double((256 - 1)*st[i])));
  printf("st[i] = %d, st1[t] = %d\n", st[i], st1[i]);
 }
 
 // 新图像的像素填充
 unsigned char* pBmpBuf1;
 pBmpBuf1 = new unsigned char[lineByte*height];
 for (int i = 0; i < height; ++i){
  for (int j = 0; j < width; ++j){
   t = *(pBmpBuf + i*lineByte + j);
   *(pBmpBuf1 + i*lineByte + j) = st1[t];
  }
 }
 
 FILE* fop = fopen("./imhist.bmp", "wb");
 if (fop == 0)
  return 0;
 fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fop);
 fwrite(&infoHead, sizeof(BITMAPINFOHEADER), 1, fop);
 fwrite(pColorTable, sizeof(RGBQUAD), 256, fop);
 fwrite(pBmpBuf1, lineByte*height, 1, fop);
 fclose(fop);
 
 system("pause");
 return 0;
}

实验结果:

实验结果分析:对比原图与实验结果图,原图中,头发和衣领处灰度值较低的地方在结果图中灰度值更低,而原图中,额头中间偏右处较亮,在结果图中更亮,灰度值更大。整体上直方图均衡化拉伸了全局对比度。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现BMP图像处理(直方图均衡化)

本文链接: https://www.lsjlt.com/news/155403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现BMP图像处理(直方图均衡化)
    本文实例为大家分享了C语言实现BMP图像直方图均衡化处理的具体代码,供大家参考,具体内容如下 计算步骤: 1)统计各灰度值的概率; 2)计算了累积概率直方图(CDF); 3)取整扩展...
    99+
    2022-11-12
  • C语言数字图像处理之直方图均衡化
    本文实例为大家分享了C语言直方图均衡化的具体代码,供大家参考,具体内容如下 原理 直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非...
    99+
    2022-11-12
  • C语言实现直方图均衡化
    直方图均衡化部分是用c语言写的,最后用opencv显示原图像,处理后图像以及原图和处理后图的灰度直方图。 虽然做出来了,均衡化效果还可以,但不知道为什么处理后图像中有三条白线,真心搞...
    99+
    2022-11-12
  • C语言实现BMP图像细化处理
    细化(thinning)算法有很多,我们在这里介绍的是一种简单而且效果很好的算法,用它就能够实现从文本抽取骨架的功能。我们的对象是白纸黑字的文本,但在程序中为了处理的方便,还是采用 ...
    99+
    2022-11-12
  • C语言实现BMP图像闭运算处理
    闭运算可以把比结构元素小的特定图像细节出去,同时保证不产生全局的几何失真。填充比结构元素小的缺口或孔,搭接短的间断而起到连接作用。 运算:也就是先膨胀后腐蚀。 #include ...
    99+
    2022-11-12
  • C语言实现BMP图像开运算处理
    开运算可以把比结构元素小的特定图像细节出去,同时保证不产生全局的几何失真。滤掉比结构元素小的突刺,切断细长搭接而起到分离作用。 运算:用B开启A就是选出了A中某些与B相匹配的点,这些...
    99+
    2022-11-12
  • C语言实现BMP图像处理(彩色图转灰度图)
    我们知道真彩图不带调色板,每个象素用 3 个字节,表示 R、G、B 三个分量。所以处理很简单,根据 R、G、B 的值求出 Y 值后,将 R、G、B 值都赋值成 Y,写入新图即可。 在...
    99+
    2022-11-12
  • C语言实现BMP图像边缘检测处理
    本文实例为大家分享了C语言实现BMP图像边缘检测处理的具体代码,供大家参考,具体内容如下 以Sobel算子为例,其余模板算子卷积代码部分同Sobel算子。如:高斯算子、拉普拉斯算子等...
    99+
    2022-11-12
  • OpenCV-Python直方图均衡化实现图像去雾
    直方图均衡化 直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(H...
    99+
    2022-11-12
  • C语言实现BMP图像处理(哈夫曼编码)
    哈夫曼(Huffman)编码是一种常用的压缩编码方法,是 Huffman 于 1952 年为压缩文本文件建立的。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代...
    99+
    2022-11-12
  • C语言实现bmp图像平移操作
    平移变换是一种几何变换。平移的公式为:x1=x0+t,y1=y0+t,其中(x0,y0)是原图像中的坐标,(x1,y1)是经过平移变换后的对应点的坐标。 在编程中,先将处理后图像的所...
    99+
    2022-11-12
  • OpenCV-Python直方图均衡化如何实现图像去雾
    小编给大家分享一下OpenCV-Python直方图均衡化如何实现图像去雾,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!直方图均衡化直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的...
    99+
    2023-06-15
  • C语言实现将彩色bmp图像转化为灰图、灰度图像反色
    本文实例为大家分享了C语言实现将彩色bmp图像转化为灰图、灰度图像反色的具体代码,供大家参考,具体内容如下 彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef s...
    99+
    2022-11-12
  • C语言实现BMP图像的读写功能
    C语言实现BMP图像的读写 对于刚接触数字图像的同学,应该都有一个疑问,如何把一个BMP格式的图像用纯C语言读入呢,我相信这也是数字图像处理的第一步,如果有幸看到这篇文档,我就有幸的...
    99+
    2022-11-12
  • C语言实现bmp图像对比度扩展
    假设有一幅图,由于成象时光照不足,使得整幅图偏暗(例如,灰度范围从0到63);或者成象时光照过强,使得整幅图偏亮(例如,灰度范围从200到255),我们称这些情况为低对比度,即灰度都...
    99+
    2022-11-12
  • C语言如何实现BMP图像读写功能
    这篇文章给大家分享的是有关C语言如何实现BMP图像读写功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C语言实现BMP图像的读写对于刚接触数字图像的同学,应该都有一个疑问,如何把一个BMP格式的图像用纯C语言读...
    99+
    2023-06-14
  • OpenCV 直方图均衡化的实现原理解析
    目录直方图均衡化介绍图像的直方图是什么更形象解释什么是直方图均衡化?直方图均衡化是如何实现的?直方图均衡化的作用直方图均衡化步骤相关APIequalizeHist代码示例灰度图均值化...
    99+
    2022-11-13
  • matlab彩色直方图均衡化怎么实现
    要在MATLAB中实现彩色直方图均衡化,可以按照以下步骤进行操作:1. 读取彩色图像:使用`imread`函数读取原始彩色图像,例如...
    99+
    2023-09-12
    matlab
  • C语言实现BMP格式图片转化为灰度
    本文实例为大家分享了C语言将BMP格式图片转化为灰度的具体代码,供大家参考,具体内容如下 代码如下: #include<stdio.h> #include<ma...
    99+
    2022-11-12
  • Python如何实现直方图、均衡化、高斯滤波
    这篇文章将为大家详细讲解有关Python如何实现直方图、均衡化、高斯滤波,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python直方图、均衡化、高斯滤波测试原图直方图基本原理matplotlib库绘制直...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作