- 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
文档评论(0)