《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目2 夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)_第1頁
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目2 夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)_第2頁
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目2 夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)_第3頁
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目2 夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)_第4頁
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目2 夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

計(jì)算機(jī)視覺技術(shù)及應(yīng)用夯實(shí)計(jì)算機(jī)視覺開發(fā)基礎(chǔ)項(xiàng)目二

01 圖像處理基礎(chǔ)02 圖像的基本操作05 項(xiàng)目實(shí)施——貓狗數(shù)據(jù)集的圖像增廣06 項(xiàng)目實(shí)訓(xùn)目錄03 圖像的幾何變換04 繪制圖形和文本項(xiàng)目目標(biāo)知識(shí)目標(biāo)了解圖像數(shù)字化的兩個(gè)關(guān)鍵環(huán)節(jié)。了解數(shù)字圖像的分類。掌握?qǐng)D像的常用屬性及其含義。技能目標(biāo)能夠使用OpenCV進(jìn)行圖像的讀取、顯示和保存。能夠使用OpenCV進(jìn)行圖像的幾何變換。能夠使用OpenCV進(jìn)行圖形和文字的繪制。素養(yǎng)目標(biāo)夯實(shí)基礎(chǔ),培養(yǎng)一絲不茍的工作態(tài)度,增強(qiáng)積極主動(dòng)尋求解決方法的意識(shí)。培養(yǎng)學(xué)生服務(wù)集體、團(tuán)結(jié)協(xié)作的團(tuán)隊(duì)精神。踐行服務(wù)集體、服從紀(jì)律、團(tuán)結(jié)協(xié)作、顧全大局的團(tuán)隊(duì)精神。計(jì)算機(jī)視覺技術(shù)的基礎(chǔ)是圖像處理。圖像處理中的圖像增廣技術(shù)可以對(duì)圖像進(jìn)行縮放、翻轉(zhuǎn)、平移、旋轉(zhuǎn)、傾斜等多種變換,從而產(chǎn)生多張相似而不同的圖像,用于圖像分類任務(wù)。現(xiàn)有一個(gè)貓狗數(shù)據(jù)集(共有

100

幅圖像),小旌欲使用該數(shù)據(jù)集進(jìn)行圖像分類,但由于該數(shù)據(jù)集的數(shù)量不足,故小旌打算先使用圖像增廣技術(shù)來擴(kuò)充該數(shù)據(jù)集。小旌采用的圖像增廣方式為裁剪和翻轉(zhuǎn),通過這兩種變換方式,可分別生成兩批不同的圖像,以實(shí)現(xiàn)擴(kuò)充數(shù)據(jù)集的目的。項(xiàng)目描述項(xiàng)目準(zhǔn)備全班學(xué)生以

3~5

人為一組進(jìn)行分組,各組選出組長。組長組織組員掃碼觀看“計(jì)算機(jī)眼中的圖像”視頻,討論并回答下列問題。問題1:組成圖像的基本單元是什么?問題2:彩色圖像是由哪幾個(gè)通道組成的?01圖像處理基礎(chǔ)圖像處理基礎(chǔ)

圖像是人類對(duì)視覺感知的物質(zhì)再現(xiàn),是自然景物的客觀反映,是人類認(rèn)識(shí)世界的重要源泉?!皥D”是物體反射或透射光的分布,“像”是人的視覺系統(tǒng)所接受的圖在人腦中所形成的映像或認(rèn)識(shí)。模擬圖像是指在二維空間中連續(xù)變化的圖像,如傳統(tǒng)膠片相機(jī)拍攝到的照片即為模擬圖像。數(shù)字圖像是指以二維數(shù)組形式表示的圖像,如計(jì)算機(jī)中的圖像即為數(shù)字圖像。若要使用計(jì)算機(jī)對(duì)模擬圖像進(jìn)行處理,則需要先對(duì)其進(jìn)行數(shù)字化處理。圖像處理基礎(chǔ)>1.圖像的數(shù)字化

圖像的數(shù)字化是指將模擬圖像轉(zhuǎn)換成數(shù)字圖像的過程,即將連續(xù)的模擬圖像離散化成規(guī)則網(wǎng)格,并用計(jì)算機(jī)以數(shù)字的方式記錄各網(wǎng)格點(diǎn)的亮度信息,由此得到的圖像。采樣1量化2圖像處理基礎(chǔ)>1.圖像的數(shù)字化采樣是將空間上連續(xù)的圖像轉(zhuǎn)換為離散點(diǎn)的過程。采樣兩個(gè)相鄰采樣點(diǎn)之間的間隔稱為采樣間隔,在、兩個(gè)方向上的采樣間隔分別用

、

表示。量化將采樣得到的連續(xù)的灰度值通過模/數(shù)轉(zhuǎn)換器等轉(zhuǎn)換為離散的整數(shù)值。圖像處理基礎(chǔ)>1.圖像的數(shù)字化量化等級(jí)越高,圖像所含的信息就越豐富,灰度分辨率就越高,圖像質(zhì)量也就越好,但數(shù)據(jù)量會(huì)增多;量化等級(jí)越低,圖像所含的信息就越簡單,灰度分辨率就越低,圖像質(zhì)量也就越差。圖像處理基礎(chǔ)>2.?dāng)?shù)字圖像的分類灰度圖像灰度圖像又稱灰階圖像,是指每個(gè)像素為不同深度的灰色或黑白兩色的圖像?;叶葓D像灰度值的取值范圍為0~255。索引圖像索引圖像的結(jié)構(gòu)比較復(fù)雜,不僅包含圖像的二維矩陣,還包含顏色索引矩陣。顏色索引矩陣的大小由存放圖像信息的矩陣元素的值域決定。二值圖像二值圖像又稱黑白圖像,是指每個(gè)像素均為黑色或白色的圖像。彩色圖像彩色圖像通常由多個(gè)疊加的彩色通道組成,每個(gè)通道代表給定顏色分量的強(qiáng)度值。典型的3通道彩色圖像由紅(red,

R)、綠(green,

G)、藍(lán)(blue,

B)疊加而成。二值圖像灰度圖像彩色圖像索引圖像02圖像的基本操作常用的圖像讀取標(biāo)記取值和含義格式:dst=cv2.imread(filename[,flag=1])讀取圖像

圖像的基本操作>1.讀取、顯示和保存圖像其中,dst表示讀取到的圖像,若無法讀取圖像(原因包括缺少文件、權(quán)限不正確、格式不支持或格式無效),則返回None;filename表示要讀取圖像的完整路徑名;flag表示圖像讀取的標(biāo)記,為可選參數(shù),默認(rèn)為cv2.IMREAD_COLOR,其常用的取值和含義如表所示。選

項(xiàng)等價(jià)數(shù)值含

義cv2.IMREAD_UNCHANGED?1讀取完整圖像,包括alpha通道lcv2.IMREAD_GRAYSCALE0以灰度模式讀取圖像lcv2.IMREAD_COLOR1讀取彩色圖像,但忽略alpha通道,為默認(rèn)值顯示圖像

格式:cv2.imshow(winname,mat)圖像的基本操作>1.讀取、顯示和保存圖像其中,winname表示窗口名稱,如果窗口名稱已存在,則將圖像顯示在該窗口中,否則新建一個(gè)名為winname的窗口,并顯示圖像;mat表示要顯示的圖像。格式:retval=cv2.waitKey([delay=0])其中,retval表示返回值,若沒有按鍵被按下,則返回?1,若有按鍵被按下,則返回按鍵對(duì)應(yīng)的ASCII碼;delay表示等待用戶按下按鍵的時(shí)間,單位為ms,默認(rèn)為0,當(dāng)其值為負(fù)數(shù)或0時(shí),表示無限等待。等待用戶按下鍵盤上的任意按鍵

釋放(銷毀)所有正在顯示圖像的窗口

格式:cv2.destroyAllWindows()【例2-1】編寫程序,使用OpenCV讀取和顯示圖像“car.png”(見本書配套素材“例題圖像/car.png”),并設(shè)置窗口持續(xù)顯示功能,按任意鍵釋放窗口。注意:(1)顯示圖像的窗口名稱盡量不使用中文,否則容易出現(xiàn)亂碼。

(2)如果使用函數(shù)

cv2.waitKey()設(shè)置窗口顯示圖像的時(shí)間為

3s,則語句可改為“cv2.waitKey(3000)”?!緟⒖即a】#導(dǎo)入OpenCV庫importcv2#讀取圖像image=cv2.imread("car.png")#顯示圖像

cv2.imshow("car",image)#窗口等待,按任意鍵繼續(xù)cv2.waitKey()

#釋放所有窗口cv2.destroyAllWindows()圖像的基本操作>1.讀取、顯示和保存圖像【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的基本操作>1.讀取、顯示和保存圖像【高手點(diǎn)撥】(1)顯示圖像的窗口名稱盡量不使用中文,否則容易出現(xiàn)亂碼。

(2)如果使用函數(shù)

cv2.waitKey()設(shè)置窗口顯示圖像的時(shí)間為

3

s,則語句可改為

“cv2.waitKey(3000)”。例2-1

程序運(yùn)行結(jié)果格式:retval=cv2.imwrite(filename,img)保存圖像

其中,retval表示返回值,若保存成功,則返回True,否則返回False;filename表示保存圖像的完整路徑名,包含文件擴(kuò)展名;img表示需要保存的圖像數(shù)據(jù)。【例

2-2】編寫程序,使用OpenCV以灰度模式讀取并顯示圖像“car.png”(見本書配套素材“例題圖像/car.png”),若按下的鍵為字母“s”,則保存圖像后退出,否則直接退出。【參考代碼】importcv2

#導(dǎo)入OpenCV庫#以灰度模式讀取圖像image=cv2.imread("car.png",cv2.IMREAD_GRAYSCALE)

cv2.imshow("car",image) #顯示圖像k=cv2.waitKey()

#窗口等待,等待按下任意鍵ifk==ord('s'): #判斷按下的鍵是否為字母“s”cv2.imwrite("D:/save_car.jpg",image)

#保存圖像cv2.destroyAllWindows()

#釋放所有窗口圖像的基本操作>1.讀取、顯示和保存圖像【運(yùn)行結(jié)果】編寫程序,使用OpenCV以灰度模式讀取并顯示圖像“car.png”(見本書配套素材“例題圖像/car.png”),若按下的鍵為字母“s”,則保存圖像后退出,否則直接退出。圖像的基本操作>1.讀取、顯示和保存圖像例2-2程序運(yùn)行結(jié)果圖像的基本操作>2.查看圖像屬性屬性說明shape圖像的形狀。若為彩色圖像,則返回的是一個(gè)包含圖像的像素行數(shù)、像素列數(shù)和通道數(shù)組成的元組;若為灰度圖像,則返回的是一個(gè)包含圖像的像素行數(shù)和像素列數(shù)組成的元組size圖像包含的像素個(gè)數(shù)。其值為“像素行數(shù)×像素列數(shù)×通道數(shù)”,灰度圖像的通道數(shù)為1dtype圖像的數(shù)據(jù)類型在處理圖像的過程中,經(jīng)常需要獲取圖像的相關(guān)屬性,如大小、數(shù)據(jù)類型等。為此,OpenCV提供了圖像的3個(gè)常用屬性,這些屬性如下:【例2-3】編寫程序,使用OpenCV分別以默認(rèn)模式和灰度模式讀取圖像“car.png”(見本書配套素材“例題圖像/car.png”),并分別顯示圖像的形狀、像素個(gè)數(shù)和數(shù)據(jù)類型。importcv2

#導(dǎo)入OpenCV庫image_Color=cv2.imread("car.png")

#讀取彩色圖像print("顯示彩色圖像的屬性:")#顯示圖像的形狀,格式為(垂直像素,水平像素,通道數(shù))print("shape=",image_Color.shape)print("size=",image_Color.size)

#顯示圖像包含的像素個(gè)數(shù)print("type=",image_Color.dtype)

#顯示圖像的數(shù)據(jù)類型#以灰度模式讀取圖像image_Gray=cv2.imread("car.png",cv2.IMREAD_GRAYSCALE)print("顯示灰度圖像的屬性:")#顯示圖像的形狀,格式為(垂直像素,水平像素)print("shape=",image_Gray.shape)print("size=",image_Gray.size)

#顯示圖像包含的像素個(gè)數(shù)print("dtype=",image_Gray.dtype)

#顯示圖像的數(shù)據(jù)類型圖像的基本操作>2.查看圖像屬性【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的基本操作>2.查看圖像屬性例2-3程序運(yùn)行結(jié)果03圖像的幾何變換縮放圖像的幾何變換在日常生活中,往往需要對(duì)圖像進(jìn)行縮放、平移、旋轉(zhuǎn)等操作,這類操作改變了原圖像中各個(gè)區(qū)域的空間關(guān)系,對(duì)于這類操作,通常稱為圖像的幾何變換。旋轉(zhuǎn)平移翻轉(zhuǎn)傾斜圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)dst表示輸出圖像,即縮放后的圖像;src表示輸入圖像,即待縮放的圖像;dsize表示輸出圖像的大?。籪x表示水平方向的縮放比例,為可選參數(shù),默認(rèn)為None;fy表示垂直方向的縮放比例,為可選參數(shù),默認(rèn)為None;interpolation表示插值方式,用于選擇在縮放過程中對(duì)無法映射的像素賦值的方式,為可選參數(shù),默認(rèn)為cv2.INTER_LINEAR。OpenCV提供的cv2.resize()函數(shù)用于實(shí)現(xiàn)圖像的縮放。格式:dst=cv2.resize(src,dsize[,fx=None[,fy=None[,interpolation=cv2.INTER_LINEAR]]])圖像的縮放圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)插值方式含義cv2.INTER_NEAREST最鄰近插值,將距離新像素所在位置最近的像素值賦值給新像素cv2.INTER_LINEAR雙線性插值,根據(jù)水平方向和垂直方向臨近的4個(gè)像素值,計(jì)算對(duì)應(yīng)權(quán)重并賦值給新像素,為默認(rèn)值cv2.INTER_CUBIC雙立方插值,4×4像素鄰域的雙立方插值cv2.INTER_LANCZOS48×8像素鄰域的Lanczos插值cv2.INTER_AREA使用像素區(qū)域關(guān)系進(jìn)行重采樣說明:interpolation表示插值方式,常用的插值方式和含義如下表所示?!纠?-4】編寫程序,使用OpenCV的cv2.resize()函數(shù)對(duì)圖像“bear.png”(見本書配套素材“例題圖像/bear.png”)進(jìn)行縮放,并顯示原圖像和縮放后的圖像。importcv2

#導(dǎo)入OpenCV庫img=cv2.imread("bear.png") #讀取圖像dst1=cv2.resize(img,None,fx=2,fy=2)

#將寬和高放大到原圖像的2倍#將寬縮小到原圖像的1/3、高縮小到原圖像的1/2dst2=cv2.resize(img,None,fx=1/3,fy=1/2)#按照寬200像素、高200像素的大小進(jìn)行縮小dst3=cv2.resize(img,(200,200))cv2.imshow("Input",img) #顯示原圖像cv2.imshow("Resize1",dst1) #顯示縮放圖像cv2.imshow("Resize2",dst2)cv2.imshow("Resize3",dst3)cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)(a)原圖像(d)縮小為寬200像素、高200像素的圖像(c)寬縮小到1/3、高縮小到1/2的圖像(b)寬和高放大2倍后的圖像圖像的翻轉(zhuǎn)分為水平翻轉(zhuǎn)和垂直翻轉(zhuǎn)兩種。水平翻轉(zhuǎn)沿y軸翻轉(zhuǎn),呈現(xiàn)出鏡面效果;垂直翻轉(zhuǎn)則沿x軸翻轉(zhuǎn),呈現(xiàn)出倒影效果。OpenCV提供的cv2.flip()函數(shù)用于實(shí)現(xiàn)圖像的翻轉(zhuǎn)。格式:dst=cv2.flip(src,flipCode)圖像的翻轉(zhuǎn)圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)dst表示輸出圖像,即翻轉(zhuǎn)后的圖像;src表示輸入圖像,即原圖像;flipCode表示翻轉(zhuǎn)類型。翻轉(zhuǎn)類型含

義0沿x軸翻轉(zhuǎn)正數(shù)沿y軸翻轉(zhuǎn)負(fù)數(shù)同時(shí)沿x軸和y軸翻轉(zhuǎn)【例2-5】編寫程序,使用OpenCV的cv2.flip()函數(shù)對(duì)圖像“river.png”(見本書配套素材“例題圖像/river.png”)進(jìn)行翻轉(zhuǎn),并顯示原圖像和翻轉(zhuǎn)后的圖像。importcv2 #導(dǎo)入OpenCV庫img=cv2.imread("river.png") #讀取圖像dst1=cv2.flip(img,1) #沿y軸翻轉(zhuǎn)dst2=cv2.flip(img,0) #沿x軸翻轉(zhuǎn)dst3=cv2.flip(img,-1) #同時(shí)沿x軸和y軸翻轉(zhuǎn)cv2.imshow("Input",img) #顯示原圖像cv2.imshow("Flip1",dst1) #顯示翻轉(zhuǎn)后的圖像cv2.imshow("Flip2",dst2)cv2.imshow("Flip3",dst3)cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的幾何變換>1.圖像的縮放與翻轉(zhuǎn)(d)同時(shí)沿x軸和y軸翻轉(zhuǎn)后的圖像

(b)沿y軸翻轉(zhuǎn)后的圖像(a)原圖像

(c)沿x軸翻轉(zhuǎn)后的圖像OpenCV提供的cv2.warpAffine()函數(shù)用于實(shí)現(xiàn)圖像的仿射變換。格式:dst=cv2.warpAffine(src,M,dsize[,flags=cv2.INTER_LINEAR])仿射變換圖像的幾何變換>2.圖像的仿射變換dst表示輸出圖像,即仿射變換后的圖像;src表示輸入圖像,即原圖像;M表示2×3的變換矩陣,使用不同的變換矩陣,可以實(shí)現(xiàn)不同的仿射變換;dsize表示輸出圖像的大??;flags表示插值方式,為可選參數(shù),默認(rèn)為cv2.INTER_LINEAR。圖像的仿射變換是將圖像進(jìn)行一系列的線性變換(如縮放、旋轉(zhuǎn)等)和平移變換得到新圖像的操作。新圖像保留了原圖像點(diǎn)間的“平直性”、線間的“平行性”、線段間的長度比一致等性質(zhì)。圖像的幾何變換>2.圖像的仿射變換cv2.warpAffine()函數(shù)通過變換矩陣M將輸入圖像src轉(zhuǎn)換為目標(biāo)圖像dst,若變換矩陣M為則進(jìn)行何種形式的仿射變換完全取決于變換矩陣M。下面分別介紹如何通過不同的變換矩陣M實(shí)現(xiàn)不同的仿射變換。實(shí)現(xiàn)圖像平移變換時(shí),假設(shè)x軸方向的平移量為tx,y軸方向的平移量為ty,則變換矩陣M為若已知了變換矩陣M,則可直接調(diào)用cv2.warpAffine()函數(shù)實(shí)現(xiàn)圖像的平移。1.圖像的平移圖像的幾何變換>2.圖像的仿射變換說明:若tx為正數(shù),則圖像向右移動(dòng),若tx為負(fù)數(shù),則圖像向左移動(dòng);若ty為正數(shù),則圖像向下移動(dòng),若ty為負(fù)數(shù),則圖像向上移動(dòng);若tx和ty的值為0,則圖像不移動(dòng)?!纠?-6】編寫程序,使用

OpenCV

cv2.warpAffine()函數(shù)對(duì)圖像“apple.jpg”(見本書配套素材“例題圖像/apple.jpg”)進(jìn)行平移(將圖像向右移動(dòng)50像素、向下移動(dòng)100像素),并顯示原圖像和平移后的圖像。importcv2 #導(dǎo)入OpenCV庫importnumpyasnp #導(dǎo)入NumPy庫img=cv2.imread("apple.jpg")

#讀取圖像rows=len(img) #獲取圖像行數(shù)cols=len(img[0]) #獲取圖像列數(shù)M=np.float32([[1,0,50],

#向右移動(dòng)50像素

[0,1,100]])

#向下移動(dòng)100像素dst=cv2.warpAffine(img,M,(cols,rows))cv2.imshow("Input",img)

#顯示原圖像cv2.imshow("Trans",dst)

#顯示平移后的圖像cv2.waitKey()

#窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows()

#釋放所有窗口圖像的幾何變換>2.圖像的仿射變換【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的幾何變換>2.圖像的仿射變換

(a)原圖像

(b)平移后的圖像圖像的幾何變換>2.圖像的仿射變換retval表示計(jì)算得到的變換矩陣;center表示圖像旋轉(zhuǎn)的中心點(diǎn)坐標(biāo);angle表示圖像旋轉(zhuǎn)的角度,正數(shù)表示逆時(shí)針旋轉(zhuǎn),負(fù)數(shù)表示順時(shí)針旋轉(zhuǎn);scale表示圖像縮放比例。在

OpenCV

中,要實(shí)現(xiàn)圖像的旋轉(zhuǎn)變換,需要先使用

cv2.getRotationMatrix2D()函數(shù)獲取變換矩陣,再調(diào)用

cv2.warpAffine()函數(shù)進(jìn)行旋轉(zhuǎn)變換。格式:retval=cv2.getRotationMatrix2D(center,angle,scale)2.圖像的旋轉(zhuǎn)圖像旋轉(zhuǎn)是以圖像中的某一點(diǎn)為原點(diǎn),旋轉(zhuǎn)一定的角度,圖像上的所有像素都會(huì)旋轉(zhuǎn)一個(gè)相同的角度。旋轉(zhuǎn)后圖像的大小一般會(huì)改變,因?yàn)橐研D(zhuǎn)出顯示區(qū)域的圖像截去,或者擴(kuò)大圖像范圍來顯示完整的圖像?!纠?-7】編寫程序,使用OpenCV的cv2.getRotationMatrix2D()和cv2.warpAffine()函數(shù)對(duì)圖像“apple.jpg”(見本書配套素材“例題圖像/apple.jpg”)進(jìn)行旋轉(zhuǎn),以圖像中心為旋轉(zhuǎn)的中心點(diǎn),逆時(shí)針旋轉(zhuǎn)30度,并將圖像縮小為原圖像的80%。importcv2 #導(dǎo)入OpenCV庫img=cv2.imread("apple.jpg") #讀取圖像rows=len(img) #獲取圖像行數(shù)cols=len(img[0]) #獲取圖像列數(shù)center=(rows/2,cols/2) #圖像的中心點(diǎn)#以圖像中心為旋轉(zhuǎn)的中心點(diǎn),逆時(shí)針旋轉(zhuǎn)30度,并將圖像縮小為原圖像的80%M=cv2.getRotationMatrix2D(center,30,0.8)dst=cv2.warpAffine(img,M,(cols,rows)) #旋轉(zhuǎn)變換cv2.imshow("Input",img) #顯示原圖像cv2.imshow("Rotate",dst) #顯示旋轉(zhuǎn)后的圖像cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口圖像的幾何變換>2.圖像的仿射變換【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的幾何變換>2.圖像的仿射變換

(a)原圖像

(b)旋轉(zhuǎn)后的圖像傾斜

OpenCV

需要定位圖像的

3

個(gè)點(diǎn)來計(jì)算傾斜效果,這

3

個(gè)點(diǎn)分別是“左上角”的點(diǎn)A、“右上角”的點(diǎn)B和“左下角”的點(diǎn)C,如圖

2-9

所示。因?yàn)橐WC圖像的“平直性”和“平行性”,OpenCV會(huì)根據(jù)這

3

個(gè)點(diǎn)的位置變化來計(jì)算其他像素的位置變化,無須“右下角”的點(diǎn)作為第4個(gè)參數(shù)。圖像的幾何變換>2.圖像的仿射變換通過3個(gè)點(diǎn)實(shí)現(xiàn)圖像的傾斜效果OpenCV提供的cv2.getAffineTransform()函數(shù)用于計(jì)算圖像傾斜的變換矩陣。格式:retval=cv2.getAffineTransform(src,dst)3.圖像的傾斜圖像的幾何變換>2.圖像的仿射變換retval表示計(jì)算得到的變換矩陣;src表示輸入圖像的3個(gè)點(diǎn)的坐標(biāo),格式為3行2列的32位浮點(diǎn)型列表;dst表示輸出圖像的3個(gè)點(diǎn)的坐標(biāo),格式與src相同。【例2-8】編寫程序,使用OpenCV的cv2.getAffineTransform()和cv2.warpAffine()函數(shù)對(duì)圖像“apple.jpg”(見本書配套素材“例題圖像/apple.jpg”)進(jìn)行傾斜變換,并顯示原圖像和傾斜后的圖像。importcv2 #導(dǎo)入OpenCV庫importnumpyasnp #導(dǎo)入NumPy庫img=cv2.imread("apple.jpg")

#讀取圖像rows=len(img) #獲取圖像行數(shù)cols=len(img[0]) #獲取圖像列數(shù)#獲取原圖像3個(gè)點(diǎn)的坐標(biāo),32位浮點(diǎn)型p1=np.float32([[0,0],[cols-1,0],[0,rows-1]])#獲取傾斜圖像對(duì)應(yīng)3個(gè)點(diǎn)的坐標(biāo),32位浮點(diǎn)型p2=np.float32([[0,rows*0.33],[cols*0.85,rows*0.25],[cols*0.15,rows*0.7]])M=cv2.getAffineTransform(p1,p2)

#根據(jù)3個(gè)點(diǎn)的變化軌跡計(jì)算出變換矩陣dst=cv2.warpAffine(img,M,(cols,rows))

#按照變換矩陣進(jìn)行傾斜cv2.imshow("Input",img)

#顯示原圖像cv2.imshow("Incline",dst)

#顯示傾斜后的圖像cv2.waitKey()

#窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows()

#釋放所有窗口圖像的幾何變換>2.圖像的仿射變換【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。圖像的幾何變換>2.圖像的仿射變換

(a)原圖像

(b)傾斜后的圖像04繪制圖形和文本繪制圖形和文本>1.繪制圖形OpenCV提供了封裝好的繪圖函數(shù),用戶不需要關(guān)心如何修改像素值,直接調(diào)用就可以繪制線段、矩形、圓、多邊形和橢圓等圖形,常用的繪圖函數(shù)如表所示。函數(shù) 說明cv2.line(image,pt1,pt2,color[,thickness=1,[lineType=8]])繪制線段。其中,image表示畫布,即在其上繪制圖形的載體圖像;pt1表示線段的起點(diǎn)坐標(biāo);pt2表示線段的終點(diǎn)坐標(biāo);color表示所繪制線段的顏色;thickness表示線段的粗細(xì),為可選參數(shù),默認(rèn)為

1,數(shù)字越大線段越粗;lineType表示線段的類型,為可選參數(shù),默認(rèn)為8cv2.rectangle(image,pt1,pt2,color[,thickness=1,[lineType=8]])繪制矩形。其中,pt1表示矩形左上角的坐標(biāo);pt2表示矩形右下角的坐標(biāo);參數(shù)image、color、thickness和lineType與函數(shù)cv2.line()的對(duì)應(yīng)參數(shù)一致繪制圖形和文本>1.繪制圖形(續(xù)表)函數(shù) 說明cv2.circle(image,center,radius,color[,thickness=1,[lineType=8]])繪制圓。其中,center表示圓心的坐標(biāo);radius表示圓的半徑;參數(shù)image、color、thickness和lineType與函數(shù)cv2.line()的對(duì)應(yīng)參數(shù)一致cv2.polylines(image,pts,isClosed,color[,thickness=1,[lineType=8]])繪制多邊形。其中,pts表示多邊形各頂點(diǎn)的坐標(biāo),為列表類型;isClosed表示多邊形是否閉合,若其值為True,則繪制閉合的多邊形,否則依次連接各個(gè)頂點(diǎn),繪制一條曲線;參數(shù)image、color、thickness和lineType與函數(shù)cv2.line()的對(duì)應(yīng)參數(shù)一致cv2.ellipse(image,center,axes,angle,startAngle,endAngle,color[,thickness=1,[lineType=8]])繪制橢圓。其中,center表示橢圓的中心坐標(biāo);axes表示橢圓長軸和短軸的長度,為元組類型;angle表示橢圓旋轉(zhuǎn)的角度;startAngle表示橢圓弧的起始角度;endAngle表示橢圓弧的終止角度;參數(shù)image、color、thickness和lineType與函數(shù)cv2.line()的對(duì)應(yīng)參數(shù)一致【例2-9】編寫程序,使用OpenCV創(chuàng)建白色畫布,并使用繪圖函數(shù)繪制OpenCV的徽標(biāo)。importcv2

#導(dǎo)入OpenCV庫importnumpyasnp

#導(dǎo)入NumPy庫image=np.zeros((200,220,3),dtype="uint8")+255

#創(chuàng)建一幅白色畫布#繪制天藍(lán)色的矩形cv2.rectangle(image,(20,10),(200,150),(255,204,0))#繪制上方的紅色標(biāo)志cv2.ellipse(image,(106,50),(30,30),120,0,300,(0,0,255),-1,cv2.LINE_AA) #cv2.LINE_AA表示繪制的線條為抗鋸齒的線條,-1表示填充圖形cv2.circle(image,(106,50),10,(255,255,255),-1,cv2.LINE_AA)#繪制左下角的綠色標(biāo)志cv2.ellipse(image,(76,110),(30,30),0,0,300,(0,255,0),-1,cv2.LINE_AA)cv2.circle(image,(76,110),10,(255,255,255),-1,cv2.LINE_AA)#繪制右下角的藍(lán)色標(biāo)志cv2.ellipse(image,(140,110),(30,30),-60,0,300,(255,0,0),-1,cv2.LINE_AA)cv2.circle(image,(140,110),10,(255,255,255),-1,cv2.LINE_AA)cv2.imshow('Image',image)

#顯示圖像cv2.waitKey()

#窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows()

#釋放所有窗口繪制圖形和文本>1.繪制圖形【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。繪制圖形和文本>1.繪制圖形

例2-9程序運(yùn)行結(jié)果

OpenCV提供的cv2.putText()函數(shù)用于在圖像上添加文本。格式:cv2.putText(image,text,org,fontFace,fontScale,color[,thickness=1,[lineType=8

[,bottomLeftOrigin=False]]])繪制文本繪制圖形和文本>2.繪制文本text表示要添加的文本;org表示文本在圖像中左下

溫馨提示

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

評(píng)論

0/150

提交評(píng)論