


[摘要]介紹了使用QT對BMP圖像進行幾何變換的相關概念和方法。根據BMP格式圖像的格式類型和存儲原理,介紹對BMP格式圖像進行讀取和寫入方法,并在此基礎上介紹了對BMP圖片進行幾何變換的處理的方法和C++代碼。
[關鍵詞]數字圖像;幾何變換;QT;C++
數字圖像的幾何變換,顧名思義,就是對圖像進行幾何空間上的變換,比如圖像的大小、圖像的形狀、圖像的位置等變化。一般圖像處理軟件中的裁剪、縮放、旋轉等功能都是基于數字圖像的幾何變換原理工作的。市場中常見的PS等圖像處理軟件可調節參數較少,不能滿足用戶部分用戶需求,QT的界面設計使得開發帶界面的軟件更為方便,且可用C++語言編寫,運行效率高,執行速度快,適合圖像處理。
1、數字圖像的幾何變換原理
數字圖像的幾何變換一般分為兩種,一種是位置變換,比如平移、旋轉等;另一種是形狀變換,比如縮放,裁剪等。當然還有綜合兩者的復合變換。圖像幾何變換的原理比較簡單,一般可以理解為圖像的像素點在平面內的各種方向上的平移。但是對于縮放變換一般還涉及到圖像像素點的插值問題。
數字圖像的幾何變換過程可以理解為一個線性換,由公式(1)和公示(2)定義:
X=a(x,y) (1)
Y=b(x,y) (2)
公式(1)、(2)中的X、Y表示變換后的像素坐標,x、y表示變前的像素坐標,a、b是實數。而插值一般用于圖像的放大部分,對于放大后多出的像素需要經過特定的計算賦值,一般取新增像素點的周圍點的平均值作為新增像素點的亮度值。
2、程序設計步驟
程序是基于QT設計的,使用C++編程語言,所以設計過程包括界面設計和程序設計思路。
2.1程序界面設計
程序需要用戶輸入數據,故設計用戶數據接口即可。
2.2程序流程設計
程序設計的實現過程為:(1)讀取BMP文件的文件頭、信息頭、顏色表、像素點數據等位圖數據。(2)實現圖像的平移功能。主要代碼和注釋如下:
(3)實現圖像的左右反轉功能。用每行最大點數減橫坐標即可得到新的橫坐標,縱坐標不變即完成反轉
關鍵代碼如下:
(7)將圖片數據寫到新文件中。(8)如果縮放過程需要更改畫布大小,要根據新圖像所需畫布大小重新更改文件頭數據,包括文件寬度、高度、數據大小、文件大小。
3、程序測試實驗
本實驗用的是500乘500的8位BMP格式的灰度圖像。
原畫布大小旋轉丟失旋轉后畫布外的圖像,實驗結果如圖3所示
擴大畫布大小旋轉保留全部圖像,實驗結果如圖4所示