打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
dft变换
userphoto

2015.03.03

关注
Mat imdft(Mat &src/*,Mat &dst1*/)
{
Mat padded;
int opw = getOptimalDFTSize( src.cols );
int oph = getOptimalDFTSize( src.rows );
copyMakeBorder( src, padded, 0, oph-src.rows, 0, opw-src.cols, BORDER_CONSTANT, Scalar::all(0) );
Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)};
Mat complexI;
merge( planes, 2, complexI );
dft( complexI, complexI );//支持图像原地计算,调用opencv的dtf函数进行DFT计算
split( complexI, planes );
magnitude( planes[0], planes[1], planes[0] );
//////////////show dft image
Mat log_img = planes[0];
//imshow("logimg",log_img);
log_img += Scalar::all(1);
cv::log( log_img, log_img );
log_img = log_img(Rect(0, 0, log_img.cols & -2, log_img.rows & -2 ));

//DFT结果
Mat dst;
dst = log_img.clone();
cv::normalize( dst, dst, 0, 1, CV_MINMAX );
//imshow("win1",dst);
//dst =  255.*dst;
Mat dst_2;
dst.copyTo( dst_2 );
int cx = dst_2.cols/2;
int cy = dst_2.rows/2;
Mat q0( dst_2, Rect(0, 0, cx, cy) );
Mat q1( dst_2, Rect(cx, 0, cx, cy) );
Mat q2( dst_2, Rect(0, cy, cx, cy) );
Mat q3( dst_2, Rect(cx, cy, cx, cy) );

Mat temp;
//因为是共用数据的,所以下面的q0,q1,q2,q3的改变也会导致dst_2的改变。
q0.copyTo( temp );
q3.copyTo( q0 );
temp.copyTo( q3 );

q1.copyTo( temp );
q2.copyTo( q1 );
temp.copyTo( q2 );
//imshow("dst_2",dst_2);
return dst_2;
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
opencv 函数 dft 傅里叶变换
Opencv+Zbar二维码识别(一维码校正)
opencv的一些操作
C++-实现matlab的fftshift(OpenCV)
OpenCV探索之路(十三):详解掩膜mask
特征提取代码总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服