dft()函式,就是對一維或者二維陣列進行正向或反向離散傅利葉變化,第乙個和第二個引數分別是輸入和輸出,第三個引數是轉換型別,第四個引數是選擇影象的行數。
getoptimaldftsize()函式是返回dft的最優尺寸大小,只有乙個代表向量尺寸的引數。
copymakerborder()函式的作用是擴充影象邊界,首先兩個引數是輸入和輸出的影象,然後四個引數是表示四個方向擴充套件出來的畫素邊界。
magnitude()函式,是用來計算二維向量的幅值,前面兩個引數是向量的實部和虛部,第三個引數是輸出的幅值。
log()函式,用來計算自然對數,第乙個是輸入影象的引數,第二個是得到的對數值。
normalize()函式,矩陣歸一化函式,分別的引數就是輸入影象和輸出影象,並且還有一些輸入的值
離散傅利葉變換的具體步驟:
1.讀入以灰度化為原型的影象
2.將影象擴大到合適的尺寸,使用getoptimaldftsize() 來返回最佳尺寸,使用copymakeborder()來填充邊緣畫素
3.再將傅利葉變化儲存空間
4.也是呼叫傅利葉函式,將同乙個影象進行變化
5.使用**將複數轉化為幅值
6.使用對數尺寸來替換線性尺寸,為凸顯螢幕的高低變化
7.修整幅度影象限,為了讓原點能在影象的中心
8.為了提高顯示,進行歸一處理
9.最後將結果顯示出來
#include #include #include #includeusing namespace cv;
int main()
//再進行展示
imshow("原始影象", srcimage);
//showhelptext();
//然後是擴尺寸
int m = getoptimaldftsize(srcimage.rows);
int n = getoptimaldftsize(srcimage.cols);
//將新增的畫素初始化為0
mat padded;
copymakeborder(srcimage, padded, 0, m - srcimage.rows, 0, n - srcimage.cols, border_constant, scalar::all(0));
//將傅利葉的結果進行分配儲存。建立的乙個新陣列來進行合併
mat planes = ;
mat complexi;
merge(planes, 2, complexi);
//再進行就地傅利葉變換
dft(complexi, complexi);
//再講複數轉換為幅值
split(complexi, planes);//這個函式的作用是將complexi分隔成好幾個單通道陣列
//計算二維向量的幅度
magnitude(planes[0], planes[1], planes[0]);
mat magnitudeimage = planes[0];
//然後再進行對數的縮放
magnitudeimage += scalar::all(1);
log(magnitudeimage, magnitudeimage);//這個就是求對數
//再對影象進行修剪
//其中如果是奇數行的話,就進行頻譜剪裁,第二步是為了提高處理速度而延擴了影象
magnitudeimage = magnitudeimage(rect(0, 0, magnitudeimage.cols&-2, magnitudeimage.rows&-2));
//再重新排列影象,讓他在中心
int cx = magnitudeimage.cols / 2;
int cy = magnitudeimage.rows / 2;
//在對四個區域進行對應的修改
mat q0(magnitudeimage, rect(0, 0, cx, cy));
mat q1(magnitudeimage, rect(cx, 0, cx, cy));
mat q2(magnitudeimage, rect(0, cy, cx, cy));
mat q3(magnitudeimage, rect(cx, cy, cx, cy));
//再建立乙個變數
mat tmp;
q0.copyto(tmp);
q3.copyto(q0);
tmp.copyto(q3);
//都是在交換象限
q1.copyto(tmp);
q2.copyto(q1);
tmp.copyto(q2);
//進行歸一化,將浮點值換成可視的影象格式
normalize(magnitudeimage, magnitudeimage, 0, 1, norm_minmax);
//最後將結果顯示
imshow("頻譜顯示", magnitudeimage);
waitkey();
return 0;
}
OpenCv3程式設計學習一
之前學習的時候有裝過opencv,版本是3.4.而對應的visual studio是2017版本。所以直接開始建立了控制台專案,命名為2020.620.放在了d盤的vs opencvdemo 配置是vc15 大部分參考自 需要注意的是 首先關於的路徑名,可以是相對路徑,也就是存放在當前目錄下 也就是...
OpenCv3程式設計學習十一
1.仿射變換 又稱仿射對映,意思就是在幾何空間中,乙個向量空間進行一次線性變換並接上乙個平移,變換為另乙個向量空間的過程。它保持了二維影象的 平直性 和 平行性 仿射變換可以當做是乘以乙個矩陣,也就是線性變換,再加上乙個向量 平移 的形式。通常有三種變換方式 1.旋轉 2.平移 3.縮放 warpa...
OpenCv3程式設計學習十二
直方圖均衡化 這就是通過拉伸畫素強度分布範圍來增強影象對比度的一種方法。但是均衡化處理後的影象只能是近似均勻分布,均衡化影象的動態範圍擴大了。本質就是擴大量化間隔同時減少了量化級別,所以一些灰度不同的畫素可能會變的相同,最重要的是,均衡化後的如果再對其均衡化,則不會有任何變化 equalizehis...