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