基于QT的数字图像的灰度化处理程序设计

来源 :决策与信息·中旬刊 | 被引量 : 0次 | 上传用户:ccf107893228
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]介绍了使用QT对BMP图像进行灰度化处理的相关概念和方法。根据BMP格式图像的格式类型和存储原理,介绍对BMP格式图像进行读取和写入方法,并在此基础上介绍了对BMP图片进行灰度化的方法。
  [关键词]数字图像;灰度化处理;QT;C++;位图
  大家生活中很多情况下需要将一张彩色的图片转变成黑白的图片,也就是灰度图,但是大部分人都是直接使用PS或美图秀秀这些图片处理的软件进行,而对图片灰度化的过程不是十分了解甚至一无所知。很多时候我们需要把彩色图像转换为黑白图像然后进行相关的计算等。而QT的界面设计使得开发带界面的软件更为方便,且可用C++语言编写,运行效率高,执行速度快,适合图像处理。因此用QT开发一款图像灰度化的处理程序十分方便也能帮助我们理解灰度化的原理和过程。
  1、灰度化原理
  生活中,我们见到的大部分物品都是彩色的,我们生活在一个五颜六色的世界中,我们通常用来描述一个物体的颜色的诸如赤、橙、黄、绿、青、蓝、紫这些颜色名词有很多,但是即使是这样,仍然不能涵盖自然界的所有颜色或者说即使用这些词来描述一个物体的颜色仍旧不能描述得很准确。其实每一种复杂的颜色都是可以用红绿蓝这三种颜色按照不同的比例调配出来的,所以不同的颜色种类根据三种颜色所占比例的不同是不同的,数量是非常大的。
  同样,不同的色光还有不同的亮度,同样是红色,有的比较亮,有的比较暗。由此可见,颜色是无穷无尽的,那黑白图像又是怎么一回事呢?图像的灰度化的原理又是什么呢。
  其实图像灰度化就是根据公示计算出每个像素点的亮度,从而直接用亮度来表示图片,而不是用以前的R(红)、G(绿)、B(蓝)值。计算公示如下:


  这是一个矩阵计算公示,公式中的Y就是亮度值,实际上就是通过原像素点的红绿蓝的值计算出亮度值。通常灰度图的数据用8位进行存储,这样的图片灰度有256级,也就是说这种灰度化的图片中包含256中不同亮度的像素点,255是白色,0是黑色,中间是不同程度的灰色。
  而对于不同位数的BMP图像的灰度化过程也是不同的。
  对于24位的BMP图像只需要通过公式 Y=0.299R+0.587G+0.144B计算出各像素点的亮度值,然后将亮度值附给该点的RGB值即R=B=G=Y就行了。
  而对于其他位数的灰度化也有两种方法。如对于8位的BMP图像
  Ⅰ.获取第一个颜色表项中的RGB值,然后利用公式Y=0.299R+0.587G+0.144B计算出该颜色的亮度值Y,并令该颜色表项的RGB值都等于此亮度值Y。同理,再完成对剩余所有颜色表项的处理,便可实现灰度化。
  Ⅱ.在8位BMP文件的位图数据中,首先获取任意第i行,第j列像素点的颜色表索引值index,根据该索引值找到与其对应的颜色表项color[index],并获取该颜色表项的RGB值,然后利用公式Y=0.299R+0.587G+0.144B计算出该颜色的亮度值Y,再令index=Y;在完成上述處理之后,再对颜色表项按顺序灰度化,即color[index]的R=G=B=index。至此,8位BMP文件的位图数据就表示每个像素真实的亮度值。这里介绍的示例程序采用上述方法ii实现灰度化。
  2、程序设计步骤
  程序是基于QT设计的,使用C++编程语言,所以设计过程包括界面设计和程序设计思路。
  2.1程序界面设计
  程序需要用户输入数据,故设计用户数据接口即可。
  2.2程序流程设计
  程序设计的实现过程为:
  (1)读取BMP文件的文件头、信息头、颜色表、像素点数据等位图数据。
  其中QT中封装的获得文件名代码如下:
  namebmp=QFileDialog::getOpenFileName(this,"打开bmp文件","/","files(*.bmp)");//获得bmp文件名
  (2)根据灰度化原理进行处理,
  对8比特的BMP图片进行灰度化的代码如下:
  for(inti=0;i  {
  for(intj=0;j  {
  index=data[i][j];
  ////////24bit
  if(Bitmapinfoheader.biBitCount==24)
  {
  doubley3=0.299*data[i][j*3]+0.587*data[i][3*j+1]+0.114*data[i][3*j+2];
  inty4=(int)((y3+0.5)*10/10.0);
  if(ui->checkBox->isChecked())
  y4=255;
  data[i][j*3]=y4;
  data[i][j*3+1]=y4;
  data[i][j*3+2]=y4;
  }
  ////////8bit
  if(Bitmapinfoheader.biBitCount==8)
  y0=0.299*Rgbquad[index].rgbRed+0.587*Rgbquad[index].rgbGreen+0.114*Rgbquad[index].rgbBlue;
  (3)将新图片数据写到新文件中。
  ///////写新文件
  FILE*fp1;
  fp1=fopen((dir1+"/"+name1).toStdString().c_str(),"wb");
  fwrite(&Bitmapfileheader,14,1,fp1);
  fwrite(&Bitmapinfoheader,40,1,fp1);
  ///////8bit
  if(Bitmapinfoheader.biBitCount==8)
  {
  fwrite(Rgbquad,4*colornum,1,fp1);
  for(intn=0;n  fwrite(data[n],w1,1,fp1);
  }
  3、程序测试实验
  本实验用的是500乘500的8位BMP格式的彩色图像。
  灰度化结果如图2所示


  4、其他
  这里只介绍了8比特彩色图像的灰度化,在进行4比特图像的灰度化的过程中时要注意数据部分中,每个字节中包含两个像素的索引值,每次读出一个字节后需要进行处理。
其他文献
垫资,引发了代理商的现金流严重失衡,且看不到尽头并缺乏有效的援助。“信用销售”无疑已经开始反噬企业的利润。日前,有代理商爆料称,伴随着销售乏力和回款困难,渠道风险陡
期刊
作为2014亚洲自行车精品博览会重要活动之一,2014年10月11-12日,“励志成才心托起青春梦”昆山市青年成人仪式暨第二届昆台青年单车成人礼活动,在江苏省昆山市举办。在2014亚
[摘要]在加工机械表面的时候,有很多因素都会对表面的质量产生影响,而工件表面的质量又会对工件实际的质量产生重大的影响,所以在生产的过程中需要针对这些影响因素采取适当的方法,对其进行优化和改进,只有这样才能更好的保证我国工件生产的质量。本文作者结合多年来的工作经验,对影响机械加工表面质量的因素及控制措施进行了研究,具有重要的参考意义。  [关键词]机械加工;表面质量;改进措施  1.机械加工表面质量
笔者在一本杂志上读到了题为《铸造法治之下的自由世界--21世纪美国国家安全战略》的研究报告.该报告是普林斯顿大学国家安全研究项目的最终报告,历时多年,4000多位精英参加
期刊
大学生是我国思想政治教育的重点对象,其成长发展状况事关国家和民族的未来。教育者必须重视从注重人文关怀、改进教育方法和加强队伍建设三个方面入手探析提升大学生思想政治
受孙文盛部长的委托,我代表国土资源部对本届中国矿业城市发展论坛的召开表示热烈的祝贺。由原地矿部部长、中国矿联会长朱训同志倡导的“四矿”问题的调查和中国矿业城市可
为贯彻落实国办56号文件,去年山西省注协配合省财政厅制定了山西省贯彻落实国办56号文件的实施意见,从政策扶持、注册会计师业务范围拓展、行业人才培养等6个方面提出了15条
近年来,由于供求关系的变化,化肥市场经历了一个由卖方市场到买方市场再到卖方市场的过程.2004年,化肥市场价格持续上涨,是市场供不应求的结果.
在注册会计师行业迎接挑战、赶时趁势的关键时刻,国务院办公厅适时出台了《关于加快发展我国注册会计师行业的若干意见》(以下简称《意见》),给注册会计师行业带来了极大的发