- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- Powerpoint2007演示文稿超链接的制作.doc
- PowerPoint2003常见问题及对策.doc
- powerdesigner功能探索V10.docx
- POS76用户手册-32.doc
- POY生产工艺特点及质量指标.doc
- pp-r给水管道安装施工交底.doc
- Powerpoint教程2修饰和模板.doc
- Powerpoint教程3插入多媒体.doc
- PP-150405东京7日自由行行程.doc
- PPP协议规范(37页).doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)