計算機視覺技術 課件 第3章 給圖像加濾鏡_第1頁
計算機視覺技術 課件 第3章 給圖像加濾鏡_第2頁
計算機視覺技術 課件 第3章 給圖像加濾鏡_第3頁
計算機視覺技術 課件 第3章 給圖像加濾鏡_第4頁
計算機視覺技術 課件 第3章 給圖像加濾鏡_第5頁
已閱讀5頁,還剩69頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章給圖像加濾鏡

1.3

圖像濾鏡

1.3

圖像濾鏡

卷積運算濾鏡變換的模板是一個單通道浮點矩陣,被稱為卷積核,相應的計算規則被稱為卷積運算。移動卷積核的過程中,有“步幅”的概念,用于指定卷積核在輸入矩陣上的移動幅度,如步幅為1,每次移動1位,步幅為n,則每次移動n位。1.3

圖像濾鏡

處理不了的邊界1.3

圖像濾鏡

卷積運算解決邊界問題的1個有效的辦法是邊緣填補,主要填補方法如下:填補方法描述cv2.BORDER_DEFAULT邊界默認:OpenCV默認的方法,自動填充圖像邊界,效果像是映像一樣。cv2.BORDER_CONSTANT邊界常數:使用常數填充邊界,如0或255。cv2.BORDER_REPLICATE邊界復制:用已知的邊緣像素值填充邊界。cv2.BORDER_WRAP邊界包裝:用另外一邊的像素來補償填充。2.3函數語法卷積函數該函數支持任意卷積核的卷積運用,呈現模糊、銳化、浮雕等濾鏡效果。filter2D()函數定義為:filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])→dstdst是結果圖像;src是輸入圖像;ddepth是結果圖形的深度,設置為-1,表示圖像深度與輸入圖像一致;kernal是卷積核,anchor:錨點,默認為(-1,-1)borderType是邊緣補充方式,OpenCV默認使用cv2.BORDER_DEFAULT方式。2.3函數語法例如::[[35799][35799][35799][35799][35799]][[357910][357910][357910][357910][357910]][[47101310][35795][35795][35795][23450]]1.3

圖像濾鏡

卷積運算卷積運算可以產生Photoshop等圖像處理軟件中的各種濾鏡效果,如模糊、銳化、輪廓、浮雕等。常用的卷積核矩陣如下:第3章給圖像加濾鏡

復習編程實現明確任務內容學習圖像運算的基礎知識圖像運算基本知識

1.1圖像運算1.3圖像濾鏡1.2基本繪圖011.1圖像運算

濾鏡的實現建立在圖像運算的基礎上,學習編寫濾鏡小程序之前,先要了解圖像之間是如何進行運算的。圖像之間運算的主要內容有基本運算、繪圖、圖像變換和圖像濾鏡。根據圖像的數學特征,圖像基本運算可分為點運算、代數運算、邏輯運算和幾何運算。1.1圖像運算

1.1圖像運算

1.1圖像運算

點運算1)如果a>1,輸出圖像的對比度增大(灰度擴展)2)如果0<a<1,輸出圖像的對比度減少(灰度壓縮)3)如果a<0,輸出圖像的暗區域將變亮,亮區域變暗3.1圖像運算

完成實驗報告練習13.1圖像運算

3.1圖像運算

OpenCV圖像代數運算主要函數3.1圖像運算

符號方法與函數方法運算過程3.1圖像運算

代數運算【例】采用符號法和函數法對圖像做代數運算,比較運算結果。完成實驗報告練習2.3.1圖像運算

代數運算代碼分析:原則上進行代數運算的2個圖像的形狀和類型必須保持一致,如果大小不一致,廣播特性將會發揮作用。如Add()函數的參數可以是圖像和圖像,也可以是圖形和數值。

3.1圖像運算

邏輯運算邏輯運算是指對兩幅或多幅圖像的對應像素做邏輯與、或、異或、非等運算。常規邏輯運算的形式是按位運算,如果圖像數據類型是8位整數,要進行邏輯運算,首先要將整數轉換為8位的二進制數,再對8位二進制數按位進行邏輯運算,最后將結果再轉換為8位整數。例如:有數值1為198,數值2為219,他們的二進制分別是11000110、11011011,分別將他們進行邏輯運算,結果如下:數值(198與219)結果(十進制值)結果(二進制值)與運算19411000010或運算22311011111異或運算2900011101非運算(數值1)57001110013.1圖像運算

邏輯運算邏輯運算的一個典型應用是掩模。在圖像處理過程中,經常會使用特定的圖像全局或局部地對待處理圖像進行遮擋,以控制圖像處理的區域或處理過程,此處用于覆蓋的特定圖像被稱為掩模,也稱為掩碼。掩模在OpenCV中非常普遍,如add(src1,src2,mask)函數中mask指的就是掩模。掩模的實現采用了邏輯與運算的原理,即原圖像與0進行邏輯與運算,結果是0,與1進行與運算,結果為原圖像值。于是,只要設置好值為0和1的掩碼,就能夠達到遮擋部分區域的效果。3.1圖像運算

邏輯運算【例】讀取灰度圖cat.jpg,為圖像加上掩模,只顯示頭部區域。代碼分析:以灰度圖方式讀取圖像后,使用zeros()函數新建一個形狀與類型和原圖像一樣的全0數組,并設置數組的中心區域值為255,即二進制數11111111。OpenCV的bitwise_and()函數用于進行圖像之間的邏輯與操作。完成實驗報告練習33.1圖像運算

邏輯運算程序運行效果:第3章給圖像加濾鏡

復習【單選】圖像的值為100和250的兩個像素通過“+”運算結果為?

A

350

B

100

C

255

D

94【單選】圖像的值為100和250的兩個像素通過add()函數運算結果為?

A

350

B

100

C

255

D

943.1圖像運算

幾何運算幾何運算也稱為幾何變換,相較于前面不會改變像素位置的運算類型,幾何運算是一類能夠實現像素坐標變換的運算。從變換性質來分,幾何變換可以分為:(1)圖像的位置變換(平移、鏡像、旋轉)(2)圖像的形狀變換(放大、縮小)(3)圖像的復合變換3.1圖像運算

幾何運算縮放:resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])→dst其中:src是輸入圖像,dsize是輸出圖像大小,如(100,100);其他可用替代的方式還有設置水平縮放比例fx和垂直縮放比例fy。圖像大小和縮放比例不能同時使用,如使用縮放比例,dsize需要設置為None。Interpolation是插值方式,用于選擇在縮放過程中對無法映射的像素賦值的方式,在實際使用的時候可以不用特意去設置,使用默認方式(INTER_LINEAR)即可。此處的dsize是(寬-x軸,高-y軸),而np.shape獲得的多維數組的默認存儲方式是C,先行后列,即形狀為(高-行數,寬-列數,通道)示例語句:

dst=cv2.resize(src,(100,100))dst=cv2.resize(src,dsize=None,fx=2,fy=3)3.1圖像運算

幾何運算縮放:resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])→dst其中:示例語句:dst=cv2.resize(src,(100,100),interpolation=cv2.INTER_NEAREST)interpolation 所用的插值方法INTER_NEAREST 最近鄰插值INTER_LINEAR 雙線性插值(默認設置)INTER_AREA 使用像素區域關系進行重采樣。它可能是圖像抽取的首選方法,因為它會產生無云紋理的結果。但是當圖像縮放時,它類似于INTER_NEAREST方法。INTER_CUBIC 4x4像素鄰域的雙三次插值INTER_LANCZOS48x8像素鄰域的Lanczos插值Resize()3.1圖像運算

幾何運算翻轉:flip(src,flipCode[,dst])→dst

dst是輸出圖像,src是輸入圖像,filpCode是旋轉類型,0表示繞著x軸翻轉;正數如1、2等為繞著y軸翻轉;負數如-1、-2等為繞著x軸、y軸同時翻轉。示例語句:

dst=cv2.flip(src,1)

3.1圖像運算

幾何運算翻轉:flip(src,flipCode[,dst])→dst

仿射變換和透視變換

本質:矩陣運算區別:仿射:基于3個固定頂點的變換透視:基于4個固定頂點的變換OpenCV函數:warpAffine(img,M,shape)warpPerspective(img,M,shape)353.1圖像運算

放射變換仿射:warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])→dst其中:dst是輸出圖像,src是輸入圖像,M代表一個2×3的變換矩陣,通過使用不同的變換矩陣,就能實現不同的變換功能;dsize是輸出圖像的尺寸大小。仿射變換通過一系列變換的復合實現,能夠完成平移、縮放、翻轉、旋轉和剪切等幾何變換。示例語句:

dst=cv2.warpAffine(src,M,(200,200))

3.1圖像運算

3.1圖像運算

放射變換常用M變換矩陣變換類型變換矩陣平移縮放旋轉翻轉切變3.1圖像運算

仿射變換【例】讀取灰度圖cat.jpg,使用平移矩陣對圖像做簡單平移操作。代碼如下:完成實驗43.1圖像運算

仿射變換通過函數獲得M參數:center:旋轉中心位置angle:旋轉角度scale:圖像縮放比例M=cv2.getRotationMatrix2D(center,angle,scale)【例】,要以圖像中心為圓點,逆時針旋轉45度,并將目標圖像縮小為原始圖像的0.6倍:完成實驗5透視變換cv2.warpPerspective(src,M,dsize=(cols,rows))參數:

src:原圖

M:一個3x3的變換矩陣

dsize:輸出圖像的尺寸大小,

先指定(第一個參數是)col,再指定(第二個參數是)rowM如何得到?透視變換cv2.warpPerspective(src,M,dsize=(cols,rows))完成實驗61.2

OpenCV基本繪圖計算機中圖像是以數組的形式存儲,數組中的值代表圖像某個像素點的像素值,只要能對數組的值進行操作,就可以實現繪圖。OpenCV提供了封裝好的繪圖函數,不需要關心如何修改像素值,直接調用就可以繪制圖形,包括直線、矩形、多邊形、圓、橢圓、文字等。部分函數如下:函數描述line()在輸入圖像上畫直線arrowedLine()畫帶箭頭的直線rectangle()畫矩形circle()畫圓形ellipse()畫橢圓putText()顯示文字1.2

OpenCV基本繪圖

【例3.5】新建一個400×400尺寸的黑色畫板,在畫板上進行基本繪圖。代碼如下:完成實驗7拓展繪圖練習使用opencv繪圖函數,繪制國旗(允許使用AI工具生成Opencv代碼)/guoqing/guoqi/第3章給圖像加濾鏡

1.3

圖像濾鏡

1.3

圖像濾鏡

卷積運算濾鏡變換的模板是一個單通道浮點矩陣,被稱為卷積核,相應的計算規則被稱為卷積運算。移動卷積核的過程中,有“步幅”的概念,用于指定卷積核在輸入矩陣上的移動幅度,如步幅為1,每次移動1位,步幅為n,則每次移動n位。1.3

圖像濾鏡

處理不了的邊界1.3

圖像濾鏡

卷積運算解決邊界問題的1個有效的辦法是邊緣填補,主要填補方法如下:填補方法描述cv2.BORDER_DEFAULT邊界默認:OpenCV默認的方法,自動填充圖像邊界,效果像是映像一樣。cv2.BORDER_CONSTANT邊界常數:使用常數填充邊界,如0或255。cv2.BORDER_REPLICATE邊界復制:用已知的邊緣像素值填充邊界。cv2.BORDER_WRAP邊界包裝:用另外一邊的像素來補償填充。2.3函數語法卷積函數該函數支持任意卷積核的卷積運用,呈現模糊、銳化、浮雕等濾鏡效果。filter2D()函數定義為:filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])→dstdst是結果圖像;src是輸入圖像;ddepth是結果圖形的深度,設置為-1,表示圖像深度與輸入圖像一致;kernal是卷積核,anchor:錨點,默認為(-1,-1)borderType是邊緣補充方式,OpenCV默認使用cv2.BORDER_DEFAULT方式。2.3函數語法例如::#對類型為uint8的numpy矩陣做卷積運算,

使用不同的插值方式,查看卷積結果。代碼如下:

importcv2

importnumpyasnp

A=np.array((

[1,2,3,4,5],

[1,2,3,4,5],

[1,2,3,4,5],

[1,2,3,4,5],

[1,2,3,4,5]),dtype=np.uint8)

kernel=np.array(([0,-1,0],[0,1,1],[0,1,0]),dtype="float32")

des=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_DEFAULT)

des1=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_REPLICATE)

des2=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_CONSTANT)[[35799][35799][35799][35799][35799]][[357910][357910][357910][357910][357910]][[47101310][35795][35795][35795][23450]]1.3

圖像濾鏡

卷積運算卷積運算可以產生Photoshop等圖像處理軟件中的各種濾鏡效果,如模糊、銳化、輪廓、浮雕等。常用的卷積核矩陣如下:明確濾鏡小程序任務2.1任務分析2.2過程分解2.3函數語法02PART2.1任務分析任務分析濾鏡小程序主要使用到圖像處理中的卷積運算,通過窗口的界面交互功能,實現不同濾鏡之間的靈活切換。借助Python的GUI編程庫,如Tkinter、wxPython、PyGTK等。Tkinter是內嵌于Python3中的輕量級GUI工具庫,也是本次任務采用的GUI開發工具庫濾鏡功能的實現依賴卷積核,在前面卷積核的介紹中,已經整理出了常用的濾鏡卷積核,通過使用不同的卷積核進行卷積運算,即可觀察不同的濾鏡效果2.2過程分解過程分解濾鏡小程序的實現過程包括。界面設計。首先使用Tkinter進行界面設計,規劃左邊的控制區域和右邊的圖像顯示區域。左邊的控制區域包括圖像選擇按鈕、各種濾鏡切換按鈕。功能綁定。將各個濾鏡效果的響應函數綁定到功能按鈕上濾鏡實現。完成各個濾鏡效果響應函數的代碼編寫預期界面區域劃分2.3函數語法TkinterTkinter是Python的標準GUI庫。Python使用Tkinter可以快速的創建GUI應用程序。Python3.x使用的庫名為tkinter,使用importtkinter導入庫。Tkinter的使用過程(1)導入Tkinter模塊;(2)創建控件;(3)綁定響應函數。import

tkinter

top=tkinter.Tk()

#創建控件_代碼…#綁定控件響應程序_代碼

溫馨提示

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

評論

0/150

提交評論