《數(shù)字圖像處理》課件第2章_第1頁
《數(shù)字圖像處理》課件第2章_第2頁
《數(shù)字圖像處理》課件第2章_第3頁
《數(shù)字圖像處理》課件第2章_第4頁
《數(shù)字圖像處理》課件第2章_第5頁
已閱讀5頁,還剩224頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章數(shù)字圖像處理基礎(chǔ)2.1圖像數(shù)字化技術(shù)2.2色度學基礎(chǔ)與顏色模型2.3數(shù)字圖像類型2.4圖像文件格式2.5

OpenCV編程簡介習題2.1圖像數(shù)字化技術(shù)

設(shè)連續(xù)圖像f(x,y)經(jīng)數(shù)字化后,可以用一個離散量組成的矩陣g(即二維數(shù)組)來表示:(2-1)

矩陣g中的每一個元素稱為像元、像素或圖像元素。而g(i,j)代表(i,j)點的灰度值,即亮度值。對以上數(shù)字化過程有以下幾點說明:

(1)由于f(i,j)代表該點圖像的光強度,而光是能量的一種形式,故f(i,j)必須大于零,且為有限值,即0<f(i,j)<∞。

(2)數(shù)字化采樣一般是按正方形點陣采樣的,除此之外還有三角形點陣、正六邊形點陣采樣方式,圖2-1所示為正方形和正六邊形采樣網(wǎng)格。

圖2-1采樣網(wǎng)格

(3)式(2-1)用f(i,j)的數(shù)值來表示(i,j)位置點上灰度值的大小,亦即只反映了黑白灰度的關(guān)系。如果是一幅彩色圖像,各點的數(shù)值還應當反映色彩的變化,可用f(i,j,λ)表示,其中λ是波長。如果圖像是運動的,f(i,j)還應是時間t的函數(shù),即可表示為f(i,j,λ,t)。2.1.1采樣

圖像在空間上的離散化稱為采樣。也就是用空間上部分點的灰度值代表圖像,這些點稱為采樣點。圖像是一種二維分布的信息,為了對它進行采樣操作,需要先將二維信號變?yōu)橐痪S信號,再對一維信號完成采樣。具體做法是,先沿垂直方向按一定間隔從上到下順序地沿水平方向進行直線掃描,取出各水平行上灰度值的一維掃描信號。而后再對一維掃描信號按一定間隔采樣得到離散信號。即先沿垂直方向采樣,再沿水平方向采樣,用兩個步驟完成采樣操作。對于運動圖像(即時間域上的連續(xù)圖像),需先在時間軸上采樣,再沿垂直方向采樣,最后再沿水平方向采樣三個步驟。

對一幅圖像采樣時,若每行(即橫向)像素為M個,每列(即縱向)像素為N個,則圖像大小為M×N個像素。

在進行采樣時,采樣點間隔的選取是一個非常重要的問題,它決定了采樣后圖像的質(zhì)量,即忠實于原圖像的程度。采樣間隔的大小選取要依據(jù)原圖像的細微濃淡變化來決定。

一般,圖像中細節(jié)越多,采樣間隔應越小。根據(jù)一維采樣定理,若一維信號g(t)的最大頻率為ω,以T≤1/(2ω)為間隔進行采樣,則能夠根據(jù)采樣結(jié)果g(iT)(i=…,-1,0,1,…)完全恢復g(t),即式中采樣示意圖如圖2-2所示。圖2-2采樣示意圖2.1.2量化

模擬圖像經(jīng)過采樣后,在空間上離散化為像素。但采樣所得的像素值(即灰度值)仍是連續(xù)量。把采樣后所得的各像素的灰度值從模擬量到離散量的轉(zhuǎn)換稱為圖像灰度的量化。圖2-3(a)說明了量化過程。若連續(xù)灰度值用z來表示,對于滿足zi≤z<zi+1的z值,都量化為整數(shù)qi。qi稱為像素的灰度值。z與qi的差稱為量化誤差。一般,像素值量化后用一個字節(jié)

8bit來表示。如圖2-3(b)所示,把由黑—灰—白的連續(xù)變化的灰度值量化為0~255共256級灰度值。圖2-3量化示意圖灰度值的范圍為0~255,表示亮度從暗到明,對應圖像中的顏色為從黑到白。

連續(xù)灰度值量化為灰度級的方法有兩種:一種是等間隔量化,另一種是非等間隔量化。等間隔量化就是簡單地把采樣值的灰度范圍等間隔地分割并進行量化。對于像素灰度值在黑—白范圍較均勻分布的圖像,這種量化方法可以得到較小的量化誤差。該方法也稱為均勻量化或線性量化。為了減小量化誤差,引入了非均勻量化的方法。非均勻量化依據(jù)一幅圖像具體的灰度值分布的概率密度函數(shù),按總的量化誤差最小的原則來進行量化。具體做法是對圖像中像素灰度值頻繁出現(xiàn)的灰度值范圍,量化間隔取小一些;而對那些像素灰度值極少出現(xiàn)的范圍,則量化間隔取大一些。

由于圖像灰度值的概率分布密度函數(shù)因圖像不同而異,所以不可能找到一個適用于各種不同圖像的最佳非等間隔量化方案,因此,實用上一般多采用等間隔量化。2.1.3采樣與量化參數(shù)的選擇

一幅圖像在采樣時,行、列的采樣點與量化時每個像素量化的級數(shù),既影響數(shù)字圖像的質(zhì)量,也影響到該數(shù)字圖像數(shù)據(jù)量的大小。假定圖像取M×N個樣點,每個像素量化后的灰度二進制位數(shù)為Q,一般Q總是取為2的整數(shù)冪,即Q=2k,則存儲一幅數(shù)字圖像所需的二進制位數(shù)為

b=M×N×Q(b)(2-2)字節(jié)數(shù)為(2-3)

對一幅圖像,當量化級數(shù)Q一定時,采樣點數(shù)M×N對圖像質(zhì)量有著顯著的影響。如圖2-4所示,采樣點數(shù)越多,圖像質(zhì)量越好;當采樣點數(shù)減少時,圖像的塊狀效應就逐漸明顯。同理,當圖像的采樣點數(shù)一定時,采用不同量化級數(shù)的圖像質(zhì)量也不一樣。如圖2-5所示,量化級數(shù)越多,圖像質(zhì)量越好;量化級數(shù)越少,圖像質(zhì)量越差,量化級數(shù)最小的極端情況就是二值圖像,圖像出現(xiàn)假輪廓。圖2-4不同采樣點數(shù)對圖像質(zhì)量的影響圖2-5不同量化級數(shù)對圖像質(zhì)量的影響一般,當限定數(shù)字圖像的大小時,采用如下原則,可得到質(zhì)量較好的圖像:

(1)對緩變的圖像,應該細量化、粗采樣,以避免假輪廓。

(2)對細節(jié)豐富的圖像,應細采樣、粗量化,以避免模糊(混疊)。

對于彩色圖像,是按照顏色成分——紅(R)、綠(G)、藍(B)分別采樣和量化的。若各種顏色成分均按8bit量化,即每種顏色量級別是256,則可以處理256×256×256=16777216種顏色。

2.1.4圖像數(shù)字化設(shè)備

1.圖像數(shù)字化設(shè)備的組成

如前所述,采樣和量化是數(shù)字化一幅圖像的兩個基本過程。即把圖像劃分為若干圖像元素(像素)并給出它們的地址(采樣);度量每一像素的灰度,并把連續(xù)的度量結(jié)果量化為整數(shù)(量化);最后將這些整數(shù)結(jié)果寫入存儲設(shè)備。為完成這些功能,圖像數(shù)字化設(shè)備必須包含以下五個部分。

(1)采樣孔:使數(shù)字化設(shè)備實現(xiàn)對特定圖像元素的觀測,不受圖像其它部分的影響。

(2)圖像掃描機構(gòu):使采樣孔按照預先定義的方式在圖像上移動,從而按順序觀測每一個像素。

(3)光傳感器:通過采樣檢測圖像每一個像素的亮度。通常采用CCD陣列。

(4)量化器:將光傳感器輸出的連續(xù)量轉(zhuǎn)化為整數(shù)值。典型的量化器是A/D轉(zhuǎn)換電路,它產(chǎn)生一個與輸入電壓或電流成比例的數(shù)值。

(5)輸出存儲裝置:將量化器產(chǎn)生的顏色值(灰度或彩色)按某種格式存儲,以用于后續(xù)的計算機處理。

2.圖像數(shù)字化設(shè)備的性能

雖然數(shù)字化設(shè)備的組成各不相同,但可從如下幾個方面比較和評價其性能。

(1)像素大小。采樣孔的大小和相鄰像素的間距是兩個重要的性能指標。如果數(shù)字化設(shè)備是在一個放大率可變的光學系統(tǒng)上,那么對應于輸入圖像平面上的采樣點大小和采樣間距也是可變的。

(2)圖像大小。圖像大小即數(shù)字化設(shè)備所允許的最大輸入圖像的尺寸。

(3)線性度。對光強進行數(shù)字化時,灰度正比于圖像亮度的實際精確程度是一個重要的指標。非線性的數(shù)字化設(shè)備會影響后續(xù)過程的有效性。能將圖像量化為多少級灰度也是非常重要的參數(shù)。圖像的量化精度經(jīng)歷了早期的黑白二值圖像、灰度圖像、彩色圖像及現(xiàn)在的真彩色圖像。當然,量化精度越高,存儲像素信息需要的字節(jié)數(shù)也越多。

(4)噪聲。數(shù)字化設(shè)備的噪聲水平也是一個重要的性能參數(shù)。例如,數(shù)字化一幅灰度值恒定的圖像,雖然輸入亮度是一個常量,但是數(shù)字化設(shè)備中的固有噪聲卻會使圖像的灰度發(fā)生變化。因此,數(shù)字化設(shè)備所產(chǎn)生的噪聲是圖像質(zhì)量下降的根源之一,應當使噪聲小于圖像內(nèi)的反差點(即對比度)。

2.2色度學基礎(chǔ)與顏色模型

顏色是通過眼、腦和生活經(jīng)驗所產(chǎn)生的一種對光的視覺效應,對色彩的辨認是肉眼受到電磁波輻射能刺激后所引起的一種視覺神經(jīng)的感覺。色彩在圖像中提供了多個測度值,利用顏色信息常??梢院喕繕宋锏淖R別及從場景中提取目標。為了提供圖像處理編程所需的顏色基本知識,本節(jié)在闡述色度學基礎(chǔ)和顏色模型的基礎(chǔ)上,對彩色圖像的顏色變換、平滑與銳化、分割等常用方法進行論述。

2.2.1色度學基礎(chǔ)

灰度圖像的像素值是光強,即二維空間變量的函數(shù)

f(x,y)。如果把灰度值看成是二維空間變量和光譜變量的函數(shù)f(x,y,λ),即多光譜圖像,那么它也就是通常所說的彩色圖像。計算機顯示一幅彩色圖像時,每一個像素的顏色是通過3種基本顏色(即紅、綠、藍)合成的,即最常見

的RGB顏色模型。要理解顏色模型,首先應了解人的視覺系統(tǒng)。

1.三色原理

在人的視覺系統(tǒng)中存在著桿狀細胞和錐狀細胞兩種感光細胞。桿狀細胞為暗視器官,主要功能是辨別亮度信息;錐狀細胞是明視器官,在照度足夠高時起作用,其功能是分辨顏色。錐狀細胞將電磁光譜的可見部分分為3個波段:紅、綠、藍。故這3種顏色被稱為三基色,圖2-6表示了人類視覺系統(tǒng)3類錐狀細胞的光譜敏感曲線。圖2-6人類感光細胞的敏感曲線根據(jù)人眼的結(jié)構(gòu),所有顏色都可看作是3種基本顏色

——紅(R,red)、綠(G,green)和藍(B,blue)按照不同

的比例組合而成的。1931年,國際照明委員會(CIE)規(guī)定

3種基本色的波長分別為R:700nm,G:546.1nm,

B:435.8nm。

一幅彩色圖像的像素值可看作是光強和波長的函數(shù)值f(x,y,λ),但實際使用時,將其看作是一幅普通二維圖像,且每個像素有紅、綠、藍3個灰度值會更直觀些。

2.顏色的3個屬性

顏色是外界光刺激作用于人的視覺器官而產(chǎn)生的主觀感覺。顏色分兩大類:非彩色和彩色。非彩色是指黑色、白色和介于這二者之間深淺不同的灰色,也稱為無色系列。彩色是指除了非彩色以外的各種顏色。顏色有3個基本屬性,分別是色調(diào)、飽和度和亮度?;谶@3個基本屬性,提出了一種重要的顏色模型HSI(Hue,Saturation,Intensity)。在HSI顏色模型部分,將詳細介紹這3個基本屬性。2.2.2顏色模型

為了科學地定量描述和使用顏色,人們提出了各種顏色模型。目前常用的顏色模型按用途可分為3類:計算顏色模型、視覺顏色模型和工業(yè)顏色模型。

計算顏色模型用于進行有關(guān)顏色的理論研究。常見的RGB模型、CIEXYZ模型、Lab模型等均屬此類。視覺顏色模型是指與人眼對顏色感知的視覺模型相似的模型,它主要用于色彩的理解。常見的HSI模型、HSV模型和HSL模型均屬此類。

工業(yè)顏色模型側(cè)重于實際應用,包括彩色顯示系統(tǒng)、彩色傳輸系統(tǒng)及電視傳輸系統(tǒng)等。工業(yè)顏色模型有如印

刷中用的CMYK模型、電視系統(tǒng)用的YUV模型、用于彩色圖像壓縮的YCbCr模型等。

1.RGB模型

RGB模型采用CIE規(guī)定的三基色構(gòu)成表色系統(tǒng)。自然界的任一顏色都可通過這三基色按不同比例混合而成。由于RGB模型將三基色同時加入產(chǎn)生新的顏色,所以它是一個加色系統(tǒng)。

設(shè)顏色傳感器把數(shù)字圖像上的一個像素編碼成(R,G,B),每個分量量化范圍為[0,255]共256級。因此,RGB模型可以表示28×28×28=224=256×256×256=16777216≈1670萬種顏色。這足以表示自然界的任一顏色,故又稱其為24位真彩色。一幅圖像中的每一個像素點均被賦予不同的RGB值,便可以形成真彩色圖像,如紅色(255,0,0)、綠色(0,255,0)、藍色(0,0,255)、青色(0,255,255)、品紅(255,0,255)、黃色(255,255,0)、白色(255,255,255)、黑色(0,0,0)等,等比例混合三基色產(chǎn)生的是灰色。

RGB顏色模型可用一個三維空間中的單位立方體來表示,如圖2-7所示。

圖2-7RGB顏色模型單位立方體在RGB立方體中,所有數(shù)據(jù)都進行了標準化,其取值范圍為[0,1]。原點所對應的顏色為黑色,它的3個分量值都為零。距離原點最遠的頂點對應的顏色為白色,它的3個分量值都為1。

從黑到白的灰色分布在這兩個點的連線上,該線稱為灰色線立方體內(nèi)其余各點對應不同的顏色。彩色立方體中有3個角對應于三基色紅、綠、藍,剩下的3個角對應于三基色的補色,即青色(Cyan)、品紅(Magenta)和黃色(Yellow)。

RGB模型與顯示器等設(shè)備有著很好的對應關(guān)系,例如,在彩色液晶顯示屏中每個像素分成三個單元,或稱子像素,分別為其附加紅色、綠色和藍色濾光片。3個子像素可獨立進行控制,根據(jù)電壓的大小來改變亮度。RGB模型可以方便地實現(xiàn)三個子像素電壓的控制,即可顯示出相應的顏色。

2.CIEXYZ模型

采用RGB模型表示各種不同顏色時,存在有負值表示顏色情況。為此,CIE在1931年制定了XYZ模型,其中,

X、Y、Z分別表示3種標準原色。對于可見光中的任一種

顏色F,可以找到一組權(quán)值,使得下式成立:

F=x·X+y·Y+z·Z(2-4)

式中:x、y、z稱為標準計色系統(tǒng)下的色度坐標,可表示為(2-5)顯然,

x+y+z≡1。x、y、z中,只有兩個是相互獨立的,因此,表示某種顏色只需兩個坐標即可。據(jù)此,CIE制定了如圖2-8所示的色度圖。圖中橫軸代表標準紅色分量x,縱軸代表標準綠色分量y,標準藍色分量z=1-(x+y)。圖2-8CIEXYZ色度圖

CIEXYZ模型與RGB模型之間可以相互轉(zhuǎn)換,其轉(zhuǎn)換公式為

Lab顏色模型是CIE于1976年制定的等色空間。Lab顏色由亮度或光亮度分量L和a、b兩個色度分量組成。其中,a在正向的數(shù)值越大表示越紅,在負向的數(shù)值越大則表示越綠;b在正向的數(shù)值越大表示越黃,在負向的數(shù)值越大則表示越藍。Lab顏色與設(shè)備無關(guān),無論使用何種設(shè)備(如顯示器、打印機、計算機或掃描儀)創(chuàng)建或輸出圖像,該模型均能生成一致的顏色。Lab模型與XYZ模型的轉(zhuǎn)換公式為式中:X0、Y0、Z0為標準白色對應的X、Y、Z值。

4.HSI顏色模型

HSI模型由美國色彩學家孟塞爾(H.A.Munseu)于1915年提出,它反映了人的視覺系統(tǒng)感知彩色的方式,以色調(diào)、飽和度和強度3種基本特征量來感知顏色。

色調(diào)H(Hue):與光波的波長有關(guān),它表示人的感官對不同顏色的感受,如紅色、綠色、藍色等,它也可表示一定范圍的顏色,如暖色、冷色等。飽和度S(Saturation):表示顏色的純度。純光譜色是完全飽和的,加入白光會稀釋飽和度。

飽和度越大,顏色看起來就會越鮮艷,反之亦然。

強度I(Intensity):對應成像亮度和圖像灰度,是顏色的明亮程度。

HSI模型的建立基于兩個重要的事實:

(1)I分量與圖像的彩色信息無關(guān);

(2)H和S分量與人感受顏色的方式是緊密相聯(lián)的。這些特點使得HSI模型非常適合彩色特性檢測與分析。

若將RGB單位立方體沿主對角線進行投影,可得到圖2-9(a)所示的六邊形。投影后原來沿主對角線的灰色都投影到中心白色點,而紅色點(1,0,0)則位于右邊的角上,綠色點(0,1,0)則位于左上角,藍色點(0,0,1)則位于左下角。圖2-9(b)是HSI顏色模型的雙六棱錐表示,I是強度軸,色調(diào)H的角度范圍為[0,2π],其中,純紅色的角度為0,純綠色的角度為2π/3,純藍色的角度為4π/3。飽和度S是顏色空間任一點距I軸的距離。當然,若用圓表示RGB模型的投影,則HSI色度空間為雙圓錐3D表示。

注意:當強度I=0時,色調(diào)H、飽和度S無定義;當S=0時,色調(diào)H無定義。圖2-9HSI顏色模型HSI模型也可用如圖2-10所示的圓柱來表示。圖2-10圓柱HSI模型若將其展開,并按圖2-11進行定義,可得到HSI調(diào)色板。圖2-11HSI調(diào)色板

1)RGB轉(zhuǎn)換到HSI

首先,對取值范圍為[0,255]的R、G、B值按式(2-8)進行歸一化處理,得到3個[0,1]范圍內(nèi)的r、

g、b值:(2-8)則對應HSI模型中的H、S、I分量的計算公式為(2-11)(2-10)(2-9)式中由式(2-9)~式(2-11)計算出的h值的范圍為[0,2π],s值的范圍為[0,1],i值的范圍為[0,1],為便于理解,常將其轉(zhuǎn)換為[0°,360°],[0,100],[0,255]:(2-12)

2)HSI轉(zhuǎn)換到RGB

利用h、s、i

將HSI轉(zhuǎn)換為RGB的公式為(2-13)(2-14)(2-15)由式(2-13)~式(2-15)計算出的r、g、b值的范圍為[0,1],為便于理解與顯示,常將其轉(zhuǎn)換為[0,255]:(2-16)

例如,有一像素的顏色為RGB(100,150,200),求其對應H、S、I值的步驟如下:(1)歸一化處理:(2)用式(2-9)計算h,由于b>g,故(3)計算s:

s=1-3·min(r,g,b)=0.333(4)計算H,S,I:再如,若一像素的顏色為HSI(210°,33.3,150),求其對應R、G、B值的步驟如下:(1)計算h,s,i:(2)由于h∈[2π/3,4π/3),故(3)計算R,

G,B:與HSI相似的顏色模型還有HSV模型和HLS模型。HSV和HLS模型中的H、S與HSI模型中的H、S含義相同,V、L含義與I基本一致。但應注意,HSV模型和HLS模型與RGB模型的轉(zhuǎn)換方式不同于HSI與RGB的轉(zhuǎn)換方式。在此不再討論,請參閱出版社網(wǎng)站提供的代碼。

不同應用系統(tǒng)采用的HSI、HSV、HLS模型不完全一樣,表2-1是這三種模型在常見系統(tǒng)中的應用。

5.CMY顏色模型

CMY模型也是一種常用的顏色表示方式。印刷工業(yè)常采用CMY色彩系統(tǒng),它是通過顏色相減來產(chǎn)生其他顏色的,所以,稱這種方式為減色合成法(SubtractiveColorSynthesis)。

CMY模式的原色為青色(Cyan)、品紅色(Magenta)、黃色(Yellow)。青色C、品紅色M、黃色Y是該表色系統(tǒng)的三基色,它們分別對應3種墨水。青色吸收紅光,品紅色吸收綠光,黃色吸收藍光,印刷好的圖像被白光照射時會產(chǎn)生合適的反射,從而形成不同的色彩。部分顏色的CMY編碼為:白色(0,0,0),因為入射白色光不會被吸收;黑色(255,255,255),因為入射白光的所有成分都會被吸收;黃色(0,0,255),因為入射白光中的藍色成分容易被墨水吸收,從而留下了紅色和綠色成分,使人感覺到黃色。CMY與RGB的轉(zhuǎn)換關(guān)系為式中:C、M、Y;R、G、B均歸一化到[0,1]范圍。在實際應用中,由于黑色(Black)用量較大,印刷中往往直接用黑色墨水來產(chǎn)生黑色,從而節(jié)約青色、品紅色、黃色3種墨水的用量。因此,常常用CMYK來表示CMY模型。

6.YUV電視信號彩色坐標系統(tǒng)

彩色電視信號傳輸時,將RGB改組成亮度信號和色度信號。PAL制式將RGB三色信號改組成YUV信號,其中,Y表示亮度信號,U、V表示色差信號。RGB與YUV之間的對應關(guān)系如下:(2-18)(2-19)

7.YCbCr模型

YCbCr模型充分考慮了人眼視覺特性,可降低彩色數(shù)字圖像存儲量,是一種適合于彩色圖像壓縮的模型。

YCbCr模型與YUV模型一樣,由亮度Y、色差Cb、色差Cr構(gòu)成。與YUV模型不同的是,在構(gòu)造色差信號時,YCbCr充分考慮了RGB3個分量在視覺感受中的不同重要性。YCbCr與RGB之間的對應關(guān)系如下:(2-20)(2-21)2.2.3顏色變換

1.基本變換

顏色變換模型為

g(x,y)=T[f(x,y)] (2-22)

式中:f(x,y)是彩色輸入圖像,g(x,y)是變換或處理后的彩色圖像,T是在空間域上對f的操作。這里,像素值是從彩色空間選擇的3元組或4元組。顏色變換關(guān)系可用下式表示:

si=Ti[r1,r2,…,rn],i=1,2,…,n

(2-23)

式中:ri、si為f(x,y)和g(x,y)在圖像中任一點的彩色分量值;{T1,T2,…,Tn}為變換函數(shù)集。n的值由顏色模型而定,若選擇RGB模型,則n=3;r1、r2、r3分別表示輸入圖像的紅、綠、藍分量;選擇CMYK模型,則n=4。例如,要改進圖像的亮度,可使用

g(x,y)=k[f(x,y)](2-24)

式中:k為改進亮度的常數(shù),且0<k<1。

在HSI模型中,其變換為

s3=kr3

(2-25)

在RGB模型中,其變換為

si=kri,

i=1,2,3

(2-26)式(2-25)和式(2-26)中定義的每一變換,僅依賴于其彩色模型中的一個分量。例如,紅色的輸出分量S在式(2-26)中獨立于綠色和藍色輸入分量。此類變換是最簡單和最常用的彩色處理方法,可對每個彩色分量進行變換處理。但有些變換函數(shù)會依賴所有的輸入圖像分量,因此,不能以單獨彩色分量為基礎(chǔ)進行變換。理論上,式(2-23)可用于任何顏色模型,然而某一特定變換對特定的顏色模型會比較適用。圖2-12為直方圖均衡化處理效果,若采用HSI模型,通過對I進行處理,其結(jié)果正常,而若采用RGB模型分別對3通道進行處理,會產(chǎn)生顏色畸變(偏色)現(xiàn)象。圖2-12彩色圖像直方圖均衡化處理效果

2.彩色切片

彩色切片是指通過識別圖像中感興趣的顏色,然后將其作為一個整體從圖像中分離出來。圖2-13(a)圖像中包含了不同顏色的區(qū)域,利用彩色切片技術(shù)可將黃色區(qū)域分離出來,如圖2-13(b)所示,其余部分均被設(shè)置成灰色。圖2-13彩色切片效果彩色切片類似于偽彩色處理中的灰度分層法。由于一個彩色像素具有n維參量,每個像素變換后的彩色分量是所有n個原始像素彩色分量的函數(shù),故彩色變換函數(shù)比灰度變換函數(shù)要復雜得多。對一幅彩色圖像分層最簡單的方法,是將感興趣區(qū)域以外的區(qū)域變換為不突出的顏色(如背景色)。如果感興趣的顏色由寬為W,中心在平均值點,且由分量(a1,a2,…,an)構(gòu)成的立方體(或超立方體,n>3)所包圍,則完成彩色切片的變換函數(shù)為(2-27)式(2-27)使立方體范圍內(nèi)的顏色保持為指定的顏色,從而突出了感興趣的顏色。圖2-13(b)即為用式(2-27)進行顏色切片處理得到的效果。

當然,也可以采用球體實現(xiàn)彩色切片變換:(2-28)

2.3數(shù)字圖像類型

數(shù)字圖像可分為矢量(Vector)圖和位圖(Bitmap),位圖也稱為柵格圖像。矢量圖用一系列計算機指令來表示一幅圖,如AutoCAD中的繪圖語句。該方法的本質(zhì)是用數(shù)學(準確地說是幾何學)公式描述一幅圖像。圖像中每個形狀都是一個完整的公式,稱為一個對象。對象是一個封閉的整體,所以定義圖像上對象的變化和對象與其他對象的關(guān)系更為簡單。矢量圖具有兩個優(yōu)點:一是它的文件數(shù)據(jù)量很小,因為存儲的是其數(shù)學公式;其二是圖像質(zhì)量與分辨率無關(guān),這意味著無論將圖像放大或縮小了多少次,圖像總是以顯示設(shè)備允許的最大清晰度顯示。但是,矢量圖有一個明顯的缺點,就是不易制作色調(diào)豐富或色彩變化太多的圖像,而且繪制出來的圖像不是很逼真,同時也不易在不同的軟件間交換文件。在CorelDraw和AdobeIllustrator中生成的圖像均為矢量圖。

位圖由許多像素點來表示一幅圖像。每個像素具有顏色屬性和位置屬性。位圖又可分成線畫稿(LineArt)、灰度圖像(GrayScale)、索引顏色圖像(IndexColor)和真彩色圖像(TrueColor)。2.3.1位圖

1.線畫稿

線畫稿只有黑白兩種顏色。用掃描儀掃描圖像,當設(shè)置成LineArt格式時,掃描儀用一位顏色模式表示圖像。若樣點顏色為黑,則掃描儀將相應的像素位元置為0,否則置為1。線畫稿適合于由黑白兩色構(gòu)成而沒有灰度陰影的圖像。圖2-14所示是一幅線畫稿圖。圖2-14線畫稿圖

2.灰度圖像

灰度圖像像素的灰度級用8bit表示,每個像素都是介于黑、白之間的256(28=256)種灰度中的一種。灰度圖像只有灰度濃淡而沒有彩色。常見的黑白照片便包含了黑白之間的所有灰度色調(diào),其實就是具有256種灰度色域的單色圖像。

3.索引顏色圖像

在24位真彩色出現(xiàn)以前,由于技術(shù)和價格的原因,計算機并未達到處理每像素24位的水平。為此,人們創(chuàng)造了索引顏色(也稱為映射顏色、調(diào)色板)。在這種模式下,預先定義好每種顏色,且可供選用的一組顏色數(shù)最多為256種。一幅索引顏色圖像在圖像文件里定義,當打開該文件時,構(gòu)成該圖像具體顏色的索引值被讀入程序,然后根據(jù)索引值在調(diào)色板中找到對應的顏色。

4.真彩色圖像

“真彩色”是RGB顏色的另一種叫法。從技術(shù)角度考慮,真彩色是指寫到磁盤上的圖像類型,而RGB顏色是指顯示器的顯示模式。RGB圖像的顏色是非映射的,它可以從系統(tǒng)的“顏色表”里自由獲取所需的顏色,這種圖像文件里的顏色直接與PC機上的顯示顏色相對應。在真彩色圖像中,每一個像素由紅、綠和藍3個字節(jié)組成,每個字節(jié)為8bit,表示0到255之間的不同的亮度值,這3個字節(jié)組合,可以產(chǎn)生1670萬種不同的顏色。2.3.2位圖的有關(guān)術(shù)語

1.像素(Pixel)、點(Dot)和樣點(Sample)

在計算機中,圖像是由顯示器上的許多光點組成的,將顯示在顯示器上的這些點(光的單元)稱為像素。像素的分割常采用正方形網(wǎng)格點陣分割方案,這是因為其像素網(wǎng)格點陣規(guī)范,并易于在圖像輸入、輸出設(shè)備上實現(xiàn)。像素并不像“克”和“厘米”那樣是絕對的度量單位,而是可大可小的。如果獲取圖像時的分辨率較低,如50dpi,則顯示該圖像時,每英寸所顯示的像素個數(shù)很少,而像素變得較大。在數(shù)字圖像處理中還常用到樣點和點的概念。掃描圖像時需設(shè)置掃描儀的分辨率(Resolution),分辨率決定了掃描儀從源圖像里每英寸取多少個樣點。掃描儀將源圖像看成是由大量的網(wǎng)格組成的,然后在每個網(wǎng)格里取出一點,用該點的值代表該網(wǎng)格里所有點的顏色值,這些被選中的點就是樣點。

2.分辨率

分辨率是指數(shù)字圖像在單位長度內(nèi)所含有的像素數(shù)。與數(shù)字圖像有關(guān)的分辨率有以下幾種類型:

(1)圖像分辨率。

圖像分辨率指每英寸圖像含有多少個點或像素,分辨率的單位為dpi,例如250dpi表示該圖像每英寸含有250個點或像素。分辨率的大小直接影響到數(shù)字圖像的質(zhì)量。分辨率越高,圖像細節(jié)越清晰,但產(chǎn)生的文件尺寸越大,同時處理同一尺寸的圖像所需時間也越長。故應根據(jù)需要選擇圖像的分辨率。

圖像文件大小與圖像尺寸和分辨率密切相關(guān)。圖像尺寸越大、圖像分辨率越高,則圖像文件也就越大。所以,調(diào)整圖像尺寸和分辨率即可改變圖像文件的大小。(2)屏幕分辨率。

顯示器上每單位長度顯示的像素或點的數(shù)量稱為屏幕分辨率,通常以點/英寸(dpi)來表示。屏幕分辨率由計算機的顯示卡決定,高性能顯示卡可支持1920×1080點以上的分辨率。

(3)打印機分辨率。打印機分辨率是指打印機輸出圖像時每英寸的點數(shù)(dpi)。打印機分辨率也決定了輸出圖像的質(zhì)量。打印機分辨率高,可以減少打印的鋸齒邊緣,在灰度的半色調(diào)表現(xiàn)上也會較為平滑。由于超微細碳粉技術(shù)的成熟,新的激光打印機分辨率可達600~1200dpi。(4)掃描儀分辨率。

掃描儀分辨率是指通過掃描元件將掃描對象以每英寸多少點來表示,也用dpi表示,不過這里的點是樣點。一般掃描儀水平分辨率要比垂直分辨率高,如600×1200dpi。臺式掃描儀的分辨率可以分為光學分辨率和輸出分辨率。光學分辨率是指掃描儀硬件所真正掃描到的圖像分辨率,目前市場上產(chǎn)品的光學分辨率可達800~1200dpi以上。輸出分辨率是通過軟件強化以及內(nèi)插補點之后產(chǎn)生的分辨率,大約為光學分辨率的3~4倍。

2.4圖像文件格式

數(shù)字圖像有多種存儲格式,每種格式一般由不同的軟件商支持。隨著信息技術(shù)的發(fā)展和圖像應用領(lǐng)域的不斷拓寬,還會出現(xiàn)新的圖像格式。因此要進行圖像處理,必須了解圖像文件的格式,即圖像文件的數(shù)據(jù)結(jié)構(gòu)。

每一種圖像文件均有一個文件頭,在文件頭之后才是圖像數(shù)據(jù)。文件頭的內(nèi)容由制作該圖像文件的公司決定,一般包括文件類型、文件制作者、制作時間、版本號和文件大小等內(nèi)容。各種圖像文件的制作還涉及圖像文件的壓縮方式和存儲效率。下面介紹幾種常見的圖像文件格式。2.4.1BMP圖像文件格式

BMP(BitMapPicture)文件格式是Windows系統(tǒng)交換圖形、圖像數(shù)據(jù)的一種標準格式。BMP圖像的數(shù)據(jù)由4部分組成,如表2-2所示。

第1部分為位圖文件頭(BITMAPFILEHEADER),它由如下結(jié)構(gòu)體定義:

typedefstructtagBITMAPFILEHEADER{

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

}BITMAPFILEHEADER;

該部分結(jié)構(gòu)的固定長度是14個字節(jié)(其中:WORD為無符號16位二進制整數(shù),DWORD為無符號32位二進制整數(shù))。第2部分為位圖信息頭(BITMAPINFOHEADER),也是由結(jié)構(gòu)體定義:

typedefstructtagBITMAPINFOHEADER{

DWORD

biSize;

LONG

biWidth;

LONG

biHeight;

WORD

biPlanes;

WORD

biBitCount;

DWORD

biCompression;

DWORD

biSizeImage;

LONG

biXPelsPerMeter;

LONG

biYPelsPerMeter;

DWORD

biClrUsed;

DWORD

biClrImportant;

} BITMAPINFOHEADER;這部分結(jié)構(gòu)的長度是40個字節(jié)(其中:LONG為32位二進制整數(shù)),也是固定不變的。其中,biCompression有效的值為BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS,這都是一些Windows定義好的常量。由于RLE4和RLE8的壓縮格式用的不多,此后僅討論biCompression為BI_RGB,即圖像不壓縮的情況。第3部分為調(diào)色板(Palette)。調(diào)色板僅供灰度圖像或索引圖像使用,真彩色圖像并不需要調(diào)色板,位圖信息頭部分后直接是位圖數(shù)據(jù)。

調(diào)色板實際上是一個數(shù)組,共有biClrUsed個元素(如果該值為零,則有2的biBitCount次方個元素)。數(shù)組中每個元素的類型是一個RGBQUAD結(jié)構(gòu),占4個字節(jié),其定義如下:

typedefstructtagRGBQUAD{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

}RGBQUAD;

第4部分是圖像數(shù)據(jù)。對于用到調(diào)色板的位圖,圖像

數(shù)據(jù)就是該像素顏色在調(diào)色板中的索引值;對于真彩色圖像,圖像數(shù)據(jù)就是實際的R、G、B值。下面兩點需特別注意:

(1)圖像數(shù)據(jù)每一行的字節(jié)數(shù)必須是4的整倍數(shù),否則需要補齊。

(2)BMP文件的數(shù)據(jù)存放是從下到上、從左到右。也就是說,圖像數(shù)據(jù)是倒置的,讀取BMP文件時,先讀取最下面的數(shù)據(jù),然后依次從下往上讀取數(shù)據(jù)。

DIB(DeviceIndependentBitmap)圖像格式是設(shè)備無關(guān)位圖文件格式,其描述圖像的能力基本與BMP相同,并且能運行于多種硬件平臺,只是文件較大。2.4.2其他文件格式

1.TIF圖像文件格式

標記圖像文件格式(TagImageFileFormat,TIF)提供存儲各種信息的完備手段,可以存儲專門的信息而不違反格式宗旨,是目前流行的圖像文件交換標準之一。TIF文件格式是圖像文件格式中最復雜的一種,要求用更多的代碼來控制它,會導致文件讀寫速度慢。TIF文件由文件頭、參數(shù)指針表與參數(shù)域、參數(shù)數(shù)據(jù)表和圖像數(shù)據(jù)4部分組成,如表2-3~表2-5所示。參數(shù)指針表由一個2字節(jié)的整數(shù)和其后的一系列12字節(jié)參數(shù)域構(gòu)成,最后以一個長整型數(shù)結(jié)束。若最后的長整型數(shù)為0,表示文件的參數(shù)指針表到此為至,否則該長整數(shù)為指向下一個參數(shù)指針表的偏移。

2.GIF圖像文件格式

CompuServe開發(fā)的圖形交換文件格式GIF(GraphicsInterchangeFormat),可在不同的系統(tǒng)平臺上交流和傳輸。GIF圖像文件采取LZW壓縮算法,存儲效率高,支持多幅圖像定序或覆蓋、交錯多屏幕繪圖以及文本覆蓋。它也是Web上常用的文件格式之一,用于超文本標記語言(HTML)文檔中的索引顏色圖像,但圖像最大不能超過64M,顏色最多為256色。

GIF主要是為數(shù)據(jù)流設(shè)計的一種傳輸格式。換句話說,它具有順序的組織形式。GIF有5個主要部分以固定順序出現(xiàn),所有部分均由一個或多個塊(Block)組成。每個塊第1個字節(jié)中存放標識碼或特征碼標識。這些部分的順序為:文件標志塊、邏輯屏幕描述塊、可選的“全局”色彩表塊(調(diào)色板)、各圖像數(shù)據(jù)塊(或?qū)S玫膲K)以及尾塊(結(jié)束碼)。GIF圖像文件格式如表2-6所示。

3.PBM、PGM、PPM文件

PBM(PortableBitMap)、PGM(PortableGreyMap)、PPM(PortablePixMap)是可交換式位圖(灰度、像素)映射文件格式,通常作為各種圖像格式文件之間的轉(zhuǎn)換平臺。PBM、PGM、PPM和BMP文件一樣,圖像數(shù)據(jù)均不壓縮,但前者的文件頭信息非常簡單,文件頭以ASCII方式編碼,圖像數(shù)據(jù)以ASCII碼或字節(jié)形式編碼。文件頭的第1項是格式標識符(MagicIdentifier),表示圖像的類型及存儲格式;第2至第4項分別為圖像的寬度和高度、圖像顏色可能的最大值和注釋。文件頭之后為圖像數(shù)據(jù)。表2-7是文件格式的詳細描述。

4.PCX文件

PCX文件格式由ZSoft公司設(shè)計。各種掃描儀掃描得到的圖像均能保存成PCX格式。PCX格式支持256種顏色,不如TIF等格式功能強,但結(jié)構(gòu)較簡單,存取速度快,壓縮比適中,適合于一般軟件的使用。

PCX格式支持RGB、索引顏色、灰度和位圖顏色模式,但不支持alpha通道。PCX格式支持RLE壓縮方法,圖像顏色位數(shù)可為1、4、8或24。圖2-15是一個實際的PGM圖像文件,可以看出,PGM格式簡單,用戶讀寫非常容易。圖2-15一個實際的PGM圖像文件

PCX圖像文件由3個部分組成:文件頭、圖像數(shù)據(jù)和256色調(diào)色板。PCX的文件頭有128個字節(jié),它包括版本號,被打印或掃描圖像的分辨率(dpi)、大小(單位為像素),每掃描行的字節(jié)數(shù),每像素包含的位數(shù)據(jù)和彩色平面數(shù)。位圖數(shù)據(jù)用行程長度壓縮算法(RLE)記錄數(shù)據(jù)。

5.JPEG圖像格式

JPEG(JointPhotographer‘sExpertsGroup,聯(lián)合圖像專家組)格式,是由ISO和CCITT為靜態(tài)圖像所建立的第一個國際數(shù)字圖像壓縮標準。由于JPEG具有高壓縮比和良好的圖像質(zhì)量,被廣泛應用于多媒體和網(wǎng)絡程序中。JPEG和GIF成為HTML語法選用的圖像格式。

JPEG格式支持24位顏色,并保留照片和其他連續(xù)色調(diào)圖像中存在的亮度和色相的顯著和細微變化。2.5OpenCV編程簡介

OpenCV(OpenSourceComputerVisionLibrary)是一個開源、跨平臺的計算機視覺庫,可以運行在Linux、Windows和MacOS桌面操作平臺或Android和iOS移動操作平臺上,提供了C++、C和Java接口,采用優(yōu)化的C/C++編寫,實現(xiàn)了圖像處理和計算機視覺的2500種優(yōu)化后的通用算法。2.5.1OpenCV簡介

OpenCV的第一個預覽版本于2000年在IEEEConferenceonComputerVisionandPatternRecognition公開,并且后續(xù)提供了5個測試版本。2006年OpenCV發(fā)布1.0版,2009年10月發(fā)布2.0版,主要的更新是增加了C++接口并對現(xiàn)有實現(xiàn)進行了優(yōu)化(特別是多核心特征),提供了使用更容易、類型更安全的新函數(shù)。目前最新版本是OpenCV2.4.8。2012年8月,OpenCV由一個非盈利性組織(OpenCV.org)來維護,并保留了一個開發(fā)者網(wǎng)站()和用戶網(wǎng)站()。

OpenCV的內(nèi)建模塊功能強大且靈活多樣,這些模塊能夠解決計算機視覺系統(tǒng)中的大多數(shù)問題,可以實現(xiàn)人機互動、物體識別、圖像分割、人臉識別、動作識別、運動跟蹤、機器人視覺、運動分析、機器視覺和結(jié)構(gòu)分析等各種應用領(lǐng)域的需求。OpenCV提供了合理的編程架構(gòu)、內(nèi)存管理及GPU支持。

OpenCV的內(nèi)建模塊經(jīng)過高度優(yōu)化,可實現(xiàn)多平臺下實時處理應用系統(tǒng)。OpenCV提供的內(nèi)建模塊可粗略分類,如表2-8所示。

1.OpenCV的安裝

本書以32位Windows7為操作平臺,VisualStudio

2012為集成開發(fā)環(huán)境IDE(對于其他平臺,可參考/index.html進行安裝)。從OpenCV網(wǎng)站下載OpenCVforWindows(opencv2.4.8.exe)文件。雙擊該“opencv2.4.8.exe”文件,將其解壓到本地磁盤上,如圖2-16所示。圖2-16解壓OpenCV文件按圖2-16解壓后,OpenCV的目錄結(jié)構(gòu)見圖2-17,其中build文件夾是編譯好的OpenCV二進制文件,sources文件夾是OpenCV源代碼文件。若需要特殊功能,可自行進行編譯。由于篇幅有限,在此不進行冗述,請讀者參考/doc/tutorials/tutorials.html進行配置。圖2-17OpenCV目錄結(jié)構(gòu)

build文件夾結(jié)構(gòu)見圖2-18,保存了預編譯好的OpenCV二進制文件,由doc、include、java、python、x64和x86文件夾構(gòu)成。doc文件夾中是OpenCV的參考文檔,include文件夾中是編寫OpenCV程序時應包含的頭文件,x64、x86文件夾分別是64位和32位庫文件(lib文件)和動態(tài)鏈接庫(dll文件),java、python相關(guān)內(nèi)容請讀者自行查閱相關(guān)資料。圖2-18build文件夾目錄結(jié)構(gòu)

include文件夾結(jié)構(gòu)見圖2-19,其中opencv內(nèi)是OpenCV2.0版本以前的C版本的頭文件,opencv2內(nèi)是OpenCV2.0版本以后的C++版本的頭文件,其中的各文件夾對應了不同模塊的頭文件。

典型的C++代碼中加載OpenCV模塊的#include形式建議如下:

#include<opencv2/core/core.hpp>

#include<opencv2/imgproc/imgproc.hpp>

#include<opencv2/highgui/highgui.hpp>圖2-19include文件夾目錄結(jié)構(gòu)當然若采用舊的模式,可采用如下形式:

#include“cv.h”

x64、x86文件夾結(jié)構(gòu)相同,如圖2-20所示,包含有vc10(VS2010)、vc11(VS2012)和vc12(VS2013)

不同版本的編譯好的庫文件。例如vc11文件夾由bin、lib、staticlib三個文件來構(gòu)成,其中bin是動態(tài)鏈接庫文件,lib是庫文件,staticlib是靜態(tài)庫文件。圖2-20x64和x86文件夾目錄結(jié)構(gòu)

OpenCV解壓完成后,需要設(shè)置環(huán)境變量。右鍵單擊“我的電腦”→“屬性”→“高級”→“環(huán)境變量”,選中PATH,單擊編輯,在PATH的末尾添加以下路徑:C:\OpenCV\opencv\build\x86\vc11\bin,如圖2-21所示。圖2-21配置環(huán)境變量單擊“確定”按鈕即可完成OpenCV的安裝。

注意:①各路徑間用英文分號“;”分割。

②若是64位系統(tǒng),請將opencv\build\x86\vc11\bin改為opencv\build\x64\vc11\bin。

2.VisualStudio2012開發(fā)環(huán)境配置

配置VisualStudio2012開發(fā)環(huán)境的目的是告訴VS去什么地方尋找OpenCV的頭文件和庫文件。

打開VS2012,選擇菜單“工具”→“選項”→“項目和解決方案”→“VC++目錄”,在VS2012中打開此選項,如圖2-22所示,顯示編輯功能被否決。圖2-22解決方案屬性設(shè)置可以在具體的項目中對特定的項目單擊右鍵后選擇“屬性”來設(shè)置,但此種設(shè)置無法被繼承,即每一個項目都需要單獨設(shè)置,過于繁瑣,因此需要一個能夠被繼承的全局設(shè)置的方法。具體如下:

(1)打開VS2012,選擇“新建項目”→“win32控制臺項目”,如圖2-23所示。圖2-23新建項目對話框(2)注意選擇空項目,為了保證使用ANSIC++特性,取消預編譯頭選項,單擊“完成”按鈕,創(chuàng)建項目,

如圖2-24所示。圖2-24應用程序向?qū)В?)點擊“視圖”→“屬性管理器”,如圖2-25所示。圖2-25屬性管理器

(4)右鍵點擊“Debug|Win32”,選擇“添加新項目屬性表(p)…”,如圖2-26所示。圖2-26添加新項目屬性表(5)編輯該新屬性表,點擊左側(cè)VC++目錄,編輯右側(cè)的包含目錄與庫目錄,分別添加對應的路徑,如圖2-27和圖2-28所示。對應的路徑如下:

①包含目錄:C:\OpenCV\opencv\build\include。說明:可根據(jù)自己的情況,將其分別改為opencv\build\include文件夾所在的路徑。

②庫目錄:C:\OpenCV\opencv\build\x86\vc11\lib。

說明:可根據(jù)自己的路徑情況及操作系統(tǒng)是32位還是64位,將其改為對應的路徑。圖2-27編輯該新屬性表圖2-28添加文件包含和庫文件路徑(6)單擊“鏈接器”→“輸入”→“附加依賴項”,如圖

2-29所示。圖2-29附加依賴項如圖2-30所示,在附加依賴項里添加opencv\build\x86\vc11\lib文件夾里的lib文件名稱。圖2-30附加依賴項附加的OpenCV庫文件

opencv_calib3d248.lib

opencv_calib3d248d.lib

opencv_contrib248.lib

opencv_contrib248d.lib

opencv_core248.lib

opencv_core248d.lib

opencv_features2d248.lib

opencv_features2d248d.lib

opencv_flann248.lib

opencv_flann248d.lib

opencv_gpu248.lib

opencv_gpu248d.lib

opencv_highgui248.lib

opencv_highgui248d.lib

opencv_imgproc248.lib

opencv_imgproc248d.lib

opencv_legacy248.lib

opencv_legacy248d.lib

opencv_ml248.lib

opencv_ml248d.lib

opencv_nonfree248.lib

opencv_nonfree248d.lib

opencv_objdetect248.lib

opencv_objdetect248d.lib

opencv_ocl248.lib

opencv_ocl248d.lib

opencv_photo248.lib

opencv_photo248d.lib

opencv_stitching248.lib

opencv_stitching248d.lib

opencv_superres248.lib

opencv_superres248d.lib

opencv_ts248.lib

opencv_ts248d.lib

opencv_video248.lib

opencv_video248d.lib

opencv_videostab248.lib

opencv_videostab248d.lib

說明:上面的庫為opencv\build\x86\vc11\lib里面的庫文件,文件名后面有小寫字母“d”的為Debug庫(調(diào)試模式庫),無“d”的為Release庫(發(fā)布模式庫)。末尾的248是版本號。

3.測試程序

添加C++源程序文件main.c,在main.c中添加如下代碼:

#include<opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

intmain()

{

//readanimage

cv∷Matimage=cv∷imread(“tiger.jpg”);

//createimagewindownamed“MyImage”

cv∷namedWindow(“MyImage”);

//showtheimageonwindow

cv∷imshow(“MyImage”,image);

//waitkeyfor5000ms

cv∷waitKey(5000);

return1;

}編譯運行,正確的情況下可以出現(xiàn)如圖2-31所示窗口。圖2-31OpenCV運行環(huán)境的測試2.5.3OpenCV的數(shù)據(jù)結(jié)構(gòu)

1.2維點Point_

2維點Point_類模板定義了公有數(shù)據(jù)成員x和y,重載了

+、-、==、!=4個基本的操作,還定義了點乘、叉乘等操作。特別的是,這個類還提供了inside函數(shù)來判斷一個

點是否在矩形區(qū)域內(nèi)。為了方便使用,OpenCV又對常用的類型進行了類型重定義:

typedefPoint_<int>Point2i;

typedefPoint2iPoint;

typedefPoint_<float>Point2f;

typedefPoint_<double>Point2d;

例如:

#include<iostream>

#include<opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

usingnamespacestd;

usingnamespacecv;

intmain()

{

Point2fa(0.3f,0.f),b(0.f,0.4f);

Pointpt=(a+b)*10.f;

cout<<pt.x<<“,”<<pt.y<<endl;

return0;

}

輸出的結(jié)果:

3,4

2.3維點Point3_

類似于2維點,OpenCV同時提供了Point3_類模板,只不過它是一個3維點(x,y,z)。它的常用類型是:

typedefPoint3_<int>Point3i;

typedefPoint3_<float>Point3f;

typedefPoint3_<double>Point3d;

3.尺寸Size_類模板

Size能夠訪問的成員變量是height和width,還定義了area函數(shù)來求面積。其他的操作基本都是類型轉(zhuǎn)化函數(shù)。它的常用類型是:

typedefSize_<int>Size2i;

typedefSize2iSize;

typedefSize_<float>Size2f

4.矩形Rect_類模板

矩形區(qū)域(x,y,width,height),(x,y)為左上角坐標,范圍為[x,x+width),[y,y+height)。

rect=rect±point//矩形偏移

rect=rect±size//改變大小

rect+=point,rect-=point,rect+=size,rect-=size

rect=rect1&rect2//矩形交集

rect=rect1|rect2//包含rect1rect2的最小矩形

rect&=rect1,rect|=rect1

rect==rect1,rect!=rect1

5.旋轉(zhuǎn)矩形RotatedRect類

除了基本的矩形之外,OpenCV還提供了一個可以旋轉(zhuǎn)的矩形RotatedRect,它是由中心、變長和旋轉(zhuǎn)角度決定的??梢栽L問它的這三個成員,也可以使用points函數(shù)返回它的4個頂點,使用boundingRect求出它的外接矩形(非旋轉(zhuǎn))。例如:

RotatedRectrRect=RotatedRect(Point2f(100,100),

Size2f(100,50),30);

6.小矩陣Matx類模板

該類模板用來記錄一些小的矩陣。這些矩陣在編譯前大小就固定了。常用類例包括:

typedefMatx<float,1,2>Matx12f;

typedefMatx<double,1,2>Matx12d;

...

typedefMatx<float,1,6>Matx16f;

typedefMatx<double,1,6>Matx16d;

typedefMatx<float,2,1>Matx21f;

typedefMatx<double,2,1>Matx21d;

...

typedefMatx<float,6,1>Matx61f;

typedefMatx<double,6,1>Matx61d;

typedefMatx<float,2,2>Matx22f;

typedefMatx<double,2,2>Matx22d;

...

typedefMatx<float,6,6>Matx66f;

typedefMatx<double,6,6>Matx66d;

例如:

Matx33fm(1,2,3,

4,5,6,

7,8,9);

7.短向量Vec類模板

它支持加、減、數(shù)乘、相等、不等、求范數(shù)等運算。其常用類型包括:

typedefVec<uchar,2>Vec2b;

typedefVec<uchar,3>Vec3b;

typedefVec<uchar,4>Vec4b;

typedefVec<short,2>Vec2s;

typedefVec<short,3>Vec3s;

typedefVec<short,4>Vec4s;

typedefVec<int,2>Vec2i;

typedefVec<int,3>Vec3i;

typedefVec<int,4>Vec4i;

typedefVec<float,2>Vec2f;

typedefVec<float,3>Vec3f;

typedefVec<float,4>Vec4f;

typedefVec<float,6>Vec6f;

typedefVec<double,2>Vec2d;

typedefVec<double,3>Vec3d;

typedefVec<double,4>Vec4d;

typedefVec<double,6>Vec6d;

8.四維向量Scalar_類模板

Scalar_類是Vec<tp,4>派生來的,它是一個4元組,通常用來傳遞像素:

typedefScalar_<double>Scalar

9.Range類

Range類用來指定連續(xù)的子序列,比如矩陣的一部分。

10.Mat

cv∷Mat類用于保存其他n維數(shù)組,主要用于保存圖像數(shù)據(jù),默認情況下定義cv∷Mat類對象時,其大小為0×0。當然,也可以給其構(gòu)造函數(shù)提供合適的實參,以定義需要的數(shù)據(jù)。

例如:

cv∷Matima(240,320,CV_8U,cv∷Scalar(100));

其中,CV_8U表示每個圖像像素用1字節(jié)表示,U表示無符號。也可以用S表示有符號數(shù)。對于彩色圖像,應該使用3個通道來表示,即CV_8UC3。也可以是16位或32位整型CV_16SC3。也可以是32位或64位浮點數(shù)CV_32F。

cv∷Mat類對象離開作用域后,會自動銷毀,因此使用中非常方便,避免了內(nèi)存泄露的問題。

cv∷Mat類提供了一個引用計數(shù)器和淺復制機制以便可以將一個圖像復制給另一個圖像,而不用復制其數(shù)據(jù)。這兩個圖像會使用同一個數(shù)據(jù)區(qū),特別是當參數(shù)是值傳遞以及函數(shù)返回的是圖像時。一個引用計數(shù)器會保證只有當所有圖像的引用都銷毀后才會真正銷毀數(shù)據(jù)。若需要保留原圖像的新的備份,可以采用copyTo()函數(shù)來實現(xiàn)深復制。如:

cv∷Matimage2,image3;

image2=result;//thetwoimagesrefertothesamedata

result.copyTo(image3);//anewcopyiscreated

此時,image2和result使用的是同一個數(shù)據(jù),而image3是原圖像的復制品。這種cv∷Mat類對象分配機制使得寫一個返回圖像的函數(shù)或類方法更加安全。例如:

cv∷Matfunction(){

//createimage

cv∷Matima(240,320,CV_8U,cv∷Scalar(100));

//returnit

returnima;

}

在main函數(shù)中可以調(diào)用:

//getagray-levelimage

cv∷Matgray=function(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論