QT图像处理-.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QT图像处理-

 HYPERLINK /qytan36/archive/2010/04/04/1704226.html QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配 实验环境: 1,Linux操作系统 2,QT3编程开发环境 3,C++编程语言 傅立叶变换和傅立叶反变换 1.1. 主要源代码 readImage() 从图像中读取数据 writeImage() 往图像中写入数据 fft() 快速傅立叶变换 ifft() 快速傅立叶反变换 adjustImageSize() 调整图像大小 fourier() 傅立叶变换 ifourier() 傅立叶反变换 1.1.1 从图像中读取数据 void ImageProcess::readImage(complexdouble data[], const QImage srcImage) { byte *pImageBytes = srcImage.bits(); //数据首地址 int depth = srcImage.depth(); //每个像素的bit数 int lineBytes = srcImage.bytesPerLine(); //每行的字节数 int w = srcImage.width(); //宽 int h = srcImage.height(); //高 byte *pByte; //遍历读取每个像素,并转换为灰度值 int i, j; for(i = 0; i h; i++) { for(j = 0; j w; j++) { if(8 == depth) //采用了256色调色板,8位颜色索引 { pByte = pImageBytes + i * lineBytes + j; data[i * w + j] = complexdouble( *pByte, 0); } else if(32 == depth)//32位表示,数据格式为0xFFBBGGRR或0xAABBGGRR { pByte = pImageBytes + i * lineBytes + j * 4; //根据RGB模式转化成YIQ色彩模式的方式,取Y作为灰度值 byte pixelValue = (byte)(0.299 * (float)pByte[0] + 0.587 * (float)pByte[1] + 0.114 * (float)pByte[2]); data[i * w + j] = complexdouble( pixelValue, 0); } else { cout invalid format. depth = depth \n; return; } } } } 1.1.2 将数据写入图像 //coef为比例系数,主要用来调整灰度值以便于观察 void ImageProcess::writeImage(QImage destImage, const complexdouble data[], double coef) { int lineBytes = destImage.bytesPerLine(); int depth = destImage.depth(); int w = destImage.width(); int h = destImage.height(); byte *pImageBytes = destImage.bits(); byte *pByte; for(int i = 0; i h; i++) { for(int j = 0; j w; j++) { double spectral = abs(data[i * w + j]) * coef; //灰度值调整 spectral = spectral 255 ? 255 : spectral; //根据图像格式写数据 if(8 == depth) { pByte = pImageBytes + i * lineBytes + j; *pByte = spectral; } else if(32 == depth) { pByte = pImageBytes + i * lineBytes + j * 4; pByte[0] = pByte[1] = pByte[2] = spectral; } else { return; } } } } 1.1.3 递归形式的快速傅立叶变换 //数组a为输入,数组y为输出,2的power次方为数组的长度 void ImageProcess::fft(const complexdoubl

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档