标签:style blog http io ar color os sp on
离散傅里叶变换:DFT,文档p165
代码如下:
1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 #define NUMBER 20 8 9 using namespace std; 10 using namespace cv; 11 12 void Show(std::string name,Mat img) 13 { 14 namedWindow(name, CV_WINDOW_AUTOSIZE); 15 imshow(name, img); 16 } 17 18 19 int main() 20 { 21 22 //离散傅里叶变换DFT 23 char *filename = "test.png"; 24 25 Mat I = imread(filename, CV_LOAD_IMAGE_GRAYSCALE); 26 if (I.empty()) 27 { 28 return -1; 29 } 30 31 Mat padded;//拓展图像到最佳尺寸 32 int m = getOptimalDFTSize(I.rows);//获取行最优 33 int n = getOptimalDFTSize(I.cols);//获取列最优 34 35 //在图像的边缘添加zero,四个数字参数就是图像在四个方向拓宽的像素数 36 copyMakeBorder(I, padded, 0, m - I.rows, 0, n - I.cols, BORDER_CONSTANT, Scalar::all(0)); 37 38 //声明两个图像数组 39 Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) }; 40 //这是混合后要输出到的数组 41 Mat complexI; 42 //混合参数1的所有单通道图像到一个多通道上,2这个参数是前面数组有多少个矩阵要进行混合 43 merge(planes, 2, complexI); 44 45 //进行离散傅里叶变换,参数分别是输入和输出的图像 46 dft(complexI, complexI); 47 48 49 //计算级数并转换成对数形式 50 //log(1+sqrt(Re(DFT(I))^2+Im(DFT(I)^2) 51 52 split(complexI, planes);//将实部和虚部分离,此时planes[0]是实部矩阵,planes[1]是虚部矩阵 53 54 magnitude(planes[0], planes[1], planes[0]);//计算幅度,就是复数的模,并将结果保存到实数矩阵中 55 56 Mat magI = planes[0];//将模矩阵另存 57 58 //进行对数变换,取自然对数 59 magI += Scalar::all(1); 60 log(magI, magI); 61 62 //裁切出偶数像素的矩阵 63 magI = magI(Rect(0, 0, magI.cols & -2, magI.rows & -2)); 64 65 //重新排列象限。令原点位于中央 66 int cx = magI.cols / 2; 67 int cy = magI.rows / 2; 68 69 //获取四个象限分割矩阵 70 Mat q0(magI, Rect(0, 0, cx, cy)); 71 Mat q1(magI, Rect(cx, 0, cx, cy)); 72 Mat q2(magI, Rect(0, cy, cx, cy)); 73 Mat q3(magI, Rect(cx, cy, cx, cy)); 74 75 //进行斜线交换 76 //交换0和3 77 Mat tmp; 78 q0.copyTo(tmp); 79 q3.copyTo(q0); 80 tmp.copyTo(q3); 81 82 //交换1和2 83 q1.copyTo(tmp); 84 q2.copyTo(q1); 85 tmp.copyTo(q2); 86 87 //正常化输出图像 88 normalize(magI, magI, 0, 1, CV_MINMAX); 89 90 Show("Input Img", I); 91 Show("Output Img", magI); 92 waitKey(); 93 return 0; 94 }
具体实现不明,但是用法是可以调试文本的垂线角度:
譬如本例中我用的图像是:
得到的结果是:
与示例的说明相一致。
标签:style blog http io ar color os sp on
原文地址:http://www.cnblogs.com/lhyz/p/4147250.html