《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目5 形狀識(shí)別_第1頁(yè)
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目5 形狀識(shí)別_第2頁(yè)
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目5 形狀識(shí)別_第3頁(yè)
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目5 形狀識(shí)別_第4頁(yè)
《計(jì)算機(jī)視覺應(yīng)用與實(shí)踐》課件-項(xiàng)目5 形狀識(shí)別_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)視覺技術(shù)及應(yīng)用下面為備注功能具體操作演示視頻形狀識(shí)別項(xiàng)目五

01 邊緣檢測(cè)02 圖像輪廓04 項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類05 項(xiàng)目實(shí)訓(xùn)目錄03 霍夫變換項(xiàng)目目標(biāo)知識(shí)目標(biāo)理解圖像梯度的概念。掌握?qǐng)D像梯度的計(jì)算方法。掌握Canny邊緣檢測(cè)算法的主要步驟。了解圖像輪廓的概念。了解霍夫變換的基本原理。技能目標(biāo)能夠使用OpenCV進(jìn)行圖像的邊緣檢測(cè)。能夠使用OpenCV進(jìn)行圖像輪廓的查找、繪制及擬合。能夠使用OpenCV進(jìn)行圖像的霍夫變換。素養(yǎng)目標(biāo)提升職業(yè)操守,在面臨重大選擇時(shí),能夠做出有利于國(guó)家和民族的決策。發(fā)揚(yáng)精益求精的工匠精神,養(yǎng)成嚴(yán)謹(jǐn)認(rèn)真的工作態(tài)度。圖像的輪廓特征是圖像中非常重要的一種特征。在實(shí)際應(yīng)用中,經(jīng)常利用輪廓的大小、形狀、位置和方向等特征來進(jìn)行圖像的識(shí)別和分類。了解到這一點(diǎn),小旌打算根據(jù)圖像輪廓形狀的不同,對(duì)圖像中的交通標(biāo)志進(jìn)行識(shí)別和分類。小旌發(fā)現(xiàn),交通標(biāo)志的形狀有一定的規(guī)律,如限速標(biāo)志的形狀為圓形,警示標(biāo)志的形狀為三角形,指示標(biāo)志的形狀為矩形。他打算首先對(duì)交通標(biāo)志圖像進(jìn)行預(yù)處理,包括色彩空間的轉(zhuǎn)換和高斯濾波,然后對(duì)預(yù)處理后的圖像進(jìn)行Canny邊緣檢測(cè)和圖像輪廓查找與繪制,并根據(jù)輪廓查找的結(jié)果,對(duì)每個(gè)輪廓進(jìn)行形狀識(shí)別,以實(shí)現(xiàn)交通標(biāo)志的分類。項(xiàng)目描述項(xiàng)目準(zhǔn)備全班學(xué)生以

3~5

人為一組進(jìn)行分組,各組選出組長(zhǎng)。組長(zhǎng)組織組員掃碼觀看“邊緣檢測(cè)的主要應(yīng)用”視頻,討論并回答下列問題。問題1:__________是指圖像局部特性的突變,如灰度級(jí)的突變、顏色的突變、紋理結(jié)構(gòu)的突變等。問題2:說一說邊緣檢測(cè)的應(yīng)用場(chǎng)景(不少于3種)。01邊緣檢測(cè)邊緣檢測(cè)直方圖圖像邊緣是指圖像局部特性的不連續(xù)性,如灰度級(jí)的突變、顏色的突變、紋理結(jié)構(gòu)的突變等。在實(shí)際的圖像處理問題中,圖像的邊緣作為圖像的一種基本特征,邊緣的確定和提取經(jīng)常被應(yīng)用到較高層次的圖像中。圖像識(shí)別圖像壓縮圖像分割圖像增強(qiáng)邊緣檢測(cè)>1.圖像梯度123Sobel算子圖像梯度指的是圖像灰度變換的速度,其本質(zhì)是求導(dǎo)。用于計(jì)算圖像梯度的算子稱為梯度算子,梯度算子的本質(zhì)是卷積核。將輸入圖像與梯度算子進(jìn)行卷積運(yùn)算,即可得到體現(xiàn)不同方向邊緣信息的輸出結(jié)果。Laplacian算子Scharr算子格式:dst=cv2.Sobel(src,ddepth,dx,dy[,ksize=3[,scale=1[,delta=0[,borderType=

cv2.BORDER_DEFAULT]]]])cv2.Sobel()函數(shù)

邊緣檢測(cè)>圖像梯度>1.使用Sobel算子進(jìn)行邊緣檢測(cè)dst表示輸出圖像,即邊緣檢測(cè)后的圖像;src表示輸入圖像,即原圖像;ddepth表示輸出圖像的深度,其常見的選項(xiàng)有cv2.CV_8U(8位無符號(hào)整數(shù))、cv2.CV_16U(16位無符號(hào)整數(shù))、cv2.CV_16S(16位有符號(hào)整數(shù))、cv2.CV_32F(32位浮點(diǎn)數(shù))、cv2.CV_64F(64位浮點(diǎn)數(shù))和?1(輸出圖像與輸入圖像具有相同的深度),通常設(shè)置為cv2.CV_64F;Sobel算子又稱索貝爾算子,用于獲得數(shù)字圖像的一階梯度,它是計(jì)算機(jī)視覺領(lǐng)域中常用的一種邊緣檢測(cè)方法。Sobel算子結(jié)合了高斯平滑和微分運(yùn)算,它不但能產(chǎn)生較好的邊緣檢測(cè)效果,而且對(duì)噪聲具有平滑抑制作用。但是它得到的邊緣較粗糙,并且可能出現(xiàn)偽邊緣的現(xiàn)象。邊緣檢測(cè)>圖像梯度>1.使用Sobel算子進(jìn)行邊緣檢測(cè)

dx表示x軸(水平方向)的求導(dǎo)階數(shù),其取值可為0、1或2;

dy表示y軸(垂直方向)的求導(dǎo)階數(shù),其取值可為0、1或2;

ksize表示Sobel算子的大小,須為?1、1、3、5或7,默認(rèn)為3,當(dāng)該值為?1時(shí),則會(huì)使用Scharr算子進(jìn)行運(yùn)算;

scale表示計(jì)算導(dǎo)數(shù)時(shí)的縮放因子,為可選參數(shù),默認(rèn)為1,即不進(jìn)行縮放;

delta表示添加到邊緣檢測(cè)結(jié)果圖像dst中的可選增量,為可選參數(shù),默認(rèn)為0;

borderType表示邊界樣式,為可選參數(shù),默認(rèn)為cv2.BORDER_DEFAULT。格式:dst=cv2.Sobel(src,ddepth,dx,dy[,ksize=3[,scale=1[,delta=0[,borderType=

cv2.BORDER_DEFAULT]]]])cv2.Sobel()函數(shù)

邊緣檢測(cè)>圖像梯度>1.使用Sobel算子進(jìn)行邊緣檢測(cè)格式:dst=cv2.convertScaleAbs(src[,alpha=1[,beta=0]])cv2.convertScaleAbs()函數(shù)

dst表示輸出圖像,即結(jié)果圖像;

src表示輸入圖像,即原圖像;

alpha表示調(diào)節(jié)系數(shù),為可選參數(shù),默認(rèn)為1,即不進(jìn)行調(diào)節(jié);

beta表示調(diào)節(jié)偏移量,為可選參數(shù),默認(rèn)為1,即不進(jìn)行調(diào)節(jié)。在實(shí)際計(jì)算過程中,當(dāng)梯度值為負(fù)數(shù)時(shí),所有負(fù)數(shù)會(huì)自動(dòng)截?cái)酁?,造成圖像損失。【例5-1】

編寫程序,對(duì)圖像“sobel.png”(見本書配套素材“例題圖像/sobel.png”)使用Sobel算子分別在x軸和y軸兩個(gè)方向進(jìn)行邊緣檢測(cè),并顯示原圖像和邊緣檢測(cè)后的圖像?!緟⒖即a】importcv2 #導(dǎo)入OpenCV庫(kù)image=cv2.imread('sobel.png',cv2.IMREAD_GRAYSCALE) #讀取灰度圖像Sobelx=cv2.Sobel(image,cv2.CV_64F,1,0) #使用Sobel算子在x軸方向計(jì)算圖像梯度Sobely=cv2.Sobel(image,cv2.CV_64F,0,1) #使用Sobel算子在y軸方向計(jì)算圖像梯度grad_x=cv2.convertScaleAbs(Sobelx) #對(duì)結(jié)果求絕對(duì)值grad_y=cv2.convertScaleAbs(Sobely)Sobelxy=cv2.addWeighted(grad_x,0.5,grad_y,0.5,0) #加權(quán)求和運(yùn)算cv2.imshow("Input",image) #顯示原圖像cv2.imshow("Sobel_x",Sobelx) #顯示x軸方向計(jì)算圖像梯度后的圖像cv2.imshow("ScaleAbs_x",grad_x) #顯示求絕對(duì)值后的圖像cv2.imshow("Sobel_y",Sobely) #顯示y軸方向計(jì)算圖像梯度后的圖像cv2.imshow("ScaleAbs_y",grad_y) #顯示求絕對(duì)值后的圖像cv2.imshow("Sobel",Sobelxy) #顯示加權(quán)求和運(yùn)算后的圖像cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口邊緣檢測(cè)>圖像梯度>1.使用Sobel算子進(jìn)行邊緣檢測(cè)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。邊緣檢測(cè)>圖像梯度>1.使用Sobel算子進(jìn)行邊緣檢測(cè)(a)原圖像(b)x軸方向計(jì)算圖像梯度(c)對(duì)x軸方向圖像梯度結(jié)果求絕對(duì)值(d)y軸方向計(jì)算圖像梯度(e)對(duì)y軸方向圖像梯度結(jié)果求絕對(duì)值(f)加權(quán)求和運(yùn)算后的圖像格式:dst=cv2.Scharr(src,ddepth,dx,dy[,scale=1[,delta=0[,borderType=cv2.BORDER_DEFAULT]]])cv2.Scharr()函數(shù)

邊緣檢測(cè)>圖像梯度>2.使用Scharr算子進(jìn)行邊緣檢測(cè)cv2.Scharr()函數(shù)使用的算子大小為3×3,不需指定Scharr算子的大小,該函數(shù)其余參數(shù)與cv2.Sobel()函數(shù)中的參數(shù)一致。Scharr算子是Sobel算子的改進(jìn)版本,該算子具有和Sobel算子同樣的速度,且精度更高。當(dāng)卷積核的尺寸較大時(shí),Scharr算子的邊緣檢測(cè)效果更好。?303

?3?10?3?10010

000?303

3103(a)x軸算子

(b)y軸算子3×3

Scharr

算子【例

5-2】

編寫程序,對(duì)圖像“animal.png”(見本書配套素材“例題圖像/animal.png”)分別使用Sobel算子和Scharr算子進(jìn)行邊緣檢測(cè),并顯示原圖像和邊緣檢測(cè)后的圖像。【參考代碼】importcv2

#導(dǎo)入OpenCV庫(kù)image=cv2.imread('animal.png')

#讀取原圖像Sobelx=cv2.Sobel(image,cv2.CV_64F,1,0)

#使用Sobel算子在x軸方向計(jì)算圖像梯度Sobely=cv2.Sobel(image,cv2.CV_64F,0,1)

#使用Sobel算子在y軸方向計(jì)算圖像梯度grad_x=cv2.convertScaleAbs(Sobelx)

#求在x軸方向絕對(duì)值運(yùn)算grad_y=cv2.convertScaleAbs(Sobely)

#求在y軸方向絕對(duì)值運(yùn)算Sobelxy=cv2.addWeighted(grad_x,0.5,grad_y,0.5,0) #加權(quán)求和運(yùn)算#使用Scharr算子在x軸方向計(jì)算圖像梯度Scharrx=cv2.Scharr(image,cv2.CV_64F,1,0)#使用Scharr算子在y軸方向計(jì)算圖像梯度Scharry=cv2.Scharr(image,cv2.CV_64F,0,1)gradx=cv2.convertScaleAbs(Scharrx)

#求在x軸方向絕對(duì)值運(yùn)算grady=cv2.convertScaleAbs(Scharry)

#求在y軸方向絕對(duì)值運(yùn)算Scharrxy=cv2.addWeighted(gradx,0.5,grady,0.5,0)

#加權(quán)求和運(yùn)算cv2.imshow("Input",image)

#顯示原圖像cv2.imshow("Sobel",Sobelxy)

#顯示使用Sobel算子邊緣檢測(cè)后的圖像cv2.imshow("Scharr",Scharrxy)

#顯示使用Scharr算子邊緣檢測(cè)后的圖像cv2.waitKey()

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

#釋放所有窗口邊緣檢測(cè)>圖像梯度>2.使用Scharr算子進(jìn)行邊緣檢測(cè)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。Scharr算子檢測(cè)出的邊緣細(xì)節(jié)更多。邊緣檢測(cè)>圖像梯度>2.使用Scharr算子進(jìn)行邊緣檢測(cè)

(a)原圖像

(b)使用Sobel算子進(jìn)行邊緣檢測(cè)

(c)使用Scharr算子進(jìn)行邊緣檢測(cè)格式:dst=cv2.Laplacian(src,ddepth[,ksize=3[,scale=1[,delta=0[,borderType=cv2.BORDER_DEFAULT]]])cv2.Laplacian()函數(shù)

邊緣檢測(cè)>圖像梯度>3.使用Laplacian算子進(jìn)行邊緣檢測(cè)cv2.Laplacian()函數(shù)不需要指定方向,沒有參數(shù)dx和dy。該函數(shù)其余參數(shù)與cv2.Sobel()函數(shù)中的參數(shù)一致。Laplacian算子又稱拉普拉斯算子,是一種二階導(dǎo)數(shù)算子,其具有旋轉(zhuǎn)不變性,可以滿足不同方向的圖像邊緣銳化的要求。在通常情況下,其算子的系數(shù)之和要求為0。Laplacian算子010

?1?1?11?41

?18?1010

?1?1?13×3

Laplacian算子【例

5-3】編寫程序,對(duì)圖像“blossom.png”(見本書配套素材“例題圖像/blossom.png”)使用Laplacian算子進(jìn)行邊緣檢測(cè),并顯示原圖像和邊緣檢測(cè)后的圖像?!緟⒖即a】importcv2

#導(dǎo)入OpenCV庫(kù)image=cv2.imread('blossom.png')

#讀取原圖像#使用Laplacian算子進(jìn)行邊緣檢測(cè)Laplacian=cv2.Laplacian(image,cv2.CV_64F)LaplaAbs=cv2.convertScaleAbs(Laplacian)

#求絕對(duì)值運(yùn)算cv2.imshow("Input",image)

#顯示原圖像cv2.imshow("Laplacian",LaplaAbs)

#顯示邊緣檢測(cè)后的圖像cv2.waitKey()

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

#釋放所有窗口邊緣檢測(cè)>圖像梯度>3.使用Laplacian算子進(jìn)行邊緣檢測(cè)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。邊緣檢測(cè)>圖像梯度>3.使用Laplacian算子進(jìn)行邊緣檢測(cè)

(a)原圖像

(b)使用Laplacian算子進(jìn)行邊緣檢測(cè)邊緣檢測(cè)>圖像梯度>3.使用Laplacian算子進(jìn)行邊緣檢測(cè)簡(jiǎn)述Sobel算子、Scharr算子、Laplacian算子的區(qū)別。Scharr算子的精確度通常比Sobel算子更好一些;Sobel算子和Scharr算子只能用于單方向的圖像梯度計(jì)算,要計(jì)算多方向的圖像梯度就需要單獨(dú)計(jì)算單方向的圖像梯度再合并,而Laplacian算子則不需要。邊緣檢測(cè)>Canny邊緣檢測(cè)直方圖計(jì)算圖像中每個(gè)像素的梯度幅度和方向。使用高斯濾波去除圖像噪聲。Canny邊緣檢測(cè)算法融合了高精度和低錯(cuò)誤率的特點(diǎn),是一種有效的邊緣檢測(cè)算法。通過調(diào)整閾值,用戶可以根據(jù)具體的應(yīng)用需求來優(yōu)化邊緣檢測(cè)的效果。Canny邊緣檢測(cè)算法的主要步驟如下:01040203對(duì)圖像梯度的幅度進(jìn)行非極大值抑制。采用高低兩個(gè)閾值并借助滯后閾值方法確定最終邊緣。邊緣檢測(cè)>圖像梯度>3.使用Laplacian算子進(jìn)行邊緣檢測(cè)Canny邊緣檢測(cè)都有哪些應(yīng)用呢?由于其在實(shí)際應(yīng)用中的魯棒性和效率,Canny邊緣檢測(cè)廣泛地應(yīng)用在目標(biāo)檢測(cè)、圖像分割和特征提取等領(lǐng)域。格式:dst=cv2.Canny(image,threshold1,threshold2[,apertureSize=3[,L2gradient=False]])cv2.Canny()函數(shù)

邊緣檢測(cè)>Canny邊緣檢測(cè)dst表示輸出圖像,即邊緣檢測(cè)后的圖像;image表示輸入圖像,即原圖像;threshold1表示低閾值;threshold2表示高閾值;apertureSize表示計(jì)算圖像梯度時(shí)使用的Sobel算子的大小,為可選參數(shù),默認(rèn)為3;L2gradient表示是否使用L2范數(shù)來計(jì)算圖像梯度的幅度,為可選參數(shù),默認(rèn)為False?!纠?/p>

5-4】

編寫程序,對(duì)圖像“blossom.png”(見本書配套素材“例題圖像/blossom.png”)進(jìn)行Canny邊緣檢測(cè),并顯示原圖像和邊緣檢測(cè)后的圖像?!緟⒖即a】importcv2 #導(dǎo)入OpenCV庫(kù)image=cv2.imread('blossom.png')

#讀取原圖像Canny1=cv2.Canny(image,10,50)

#低閾值為10、高閾值為50的Canny邊緣檢測(cè)Canny2=cv2.Canny(image,100,200)

#低閾值為100、高閾值為200的Canny邊緣檢測(cè)Canny3=cv2.Canny(image,400,600)

#低閾值為400、高閾值為600的Canny邊緣檢測(cè)cv2.imshow("Input",image) #顯示原圖像cv2.imshow("Canny1",Canny1) #顯示Canny邊緣檢測(cè)后的圖像cv2.imshow("Canny2",Canny2)cv2.imshow("Canny3",Canny3)cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口邊緣檢測(cè)>Canny邊緣檢測(cè)【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示。從結(jié)果中可以看出,閾值越小,檢測(cè)出的邊緣信息越多;閾值越大,檢測(cè)出的邊緣信息越少。當(dāng)閾值很高時(shí),只能檢測(cè)出一些較明顯的邊緣。邊緣檢測(cè)>Canny邊緣檢測(cè)

(a)原圖像

(b)低閾值為10、高閾值為50

的Canny邊緣檢測(cè)(c)低閾值為100、高閾為

200的Canny邊緣檢測(cè)

(d)低閾值為400、高閾為

600的Canny邊緣檢測(cè)

邊緣檢測(cè)>Canny邊緣檢測(cè)華為攜手清華大學(xué),共同研發(fā)出了一項(xiàng)名為PMG(personalizedmultimodalgeneration)的個(gè)性化生成技術(shù)。PMG技術(shù)能夠深度分析用戶的觀影記錄和對(duì)話歷史,借助大語(yǔ)言模型的強(qiáng)大推理能力,精準(zhǔn)提取用戶偏好。這一過程包括顯式的關(guān)鍵詞提取和隱式的用戶偏好向量生成,通過使用生成器巧妙整合用戶偏好與目標(biāo)項(xiàng)關(guān)鍵詞,能夠生成既彰顯用戶個(gè)性、又契合目標(biāo)物品的多模態(tài)內(nèi)容。經(jīng)過實(shí)驗(yàn)驗(yàn)證,PMG技術(shù)展現(xiàn)出了巨大的潛力和商業(yè)價(jià)值,為用戶帶來了前所未有的豐富的、個(gè)性化的體驗(yàn),如生動(dòng)有趣的表情包、獨(dú)具特色的

T

恤設(shè)計(jì)圖、引人注目的電影海報(bào)等。素養(yǎng)之窗03霍夫變換霍夫變換霍夫變換是一種用于檢測(cè)圖像中特定幾何形狀(如直線、圓等)的方法。它通過將圖像空間中的形狀映射到參數(shù)空間(霍夫空間)來實(shí)現(xiàn)檢測(cè)。在霍夫變換中,圖像空間中的每個(gè)點(diǎn)被映射到參數(shù)空間中的一系列曲線或曲面上,這些曲線或曲面對(duì)應(yīng)于通過該點(diǎn)的所有可能形狀。在參數(shù)空間中,曲線或曲面的交點(diǎn)表示圖像空間中的共線點(diǎn)或共圓點(diǎn)。通過累加和尋找參數(shù)空間中的峰值,可以檢測(cè)出圖像中的形狀?;舴蜃儞Q>霍夫直線變換lines表示輸出向量,即檢測(cè)到的直線列表,每條直線都以(rho,theta)的形式表示,rho為直線到原點(diǎn)的距離(以像素為單位),theta為直線與x軸的夾角(以弧度為單位);src表示輸入圖像(8位單通道的二值圖像);rho表示以像素為單位的距離精度,通常為1;theta表示以弧度為單位的角度精度,通常為π/180;threshold表示累加器閾值參數(shù),高于閾值threshold的直線才會(huì)被檢測(cè)通過并返回到結(jié)果中。OpenCV提供的cv2.HoughLines()函數(shù)用于使用霍夫變換算法來檢測(cè)圖像中的直線。格式:lines=cv2.HoughLines(src,rho,theta,threshold)cv2.HoughLines()函數(shù)【例5-9】編寫程序,使用OpenCV的cv2.HoughLines()函數(shù)對(duì)圖像“weiqi.png”(見本書配套素材“例題圖像/weiqi.png”)進(jìn)行霍夫變換,檢測(cè)圖像中的直線,并顯示原圖像和霍夫直線變換后的圖像?!緟⒖即a】importcv2

#導(dǎo)入OpenCV庫(kù)importnumpyasnp

#導(dǎo)入NumPy庫(kù)image=cv2.imread('weiqi.png') #讀取原圖像cv2.imshow("Input",image) #顯示原圖像img_copy=image.copy()

#復(fù)制原圖像blur_copy=cv2.medianBlur(img_copy,5)

#使用中值濾波進(jìn)行降噪gray=cv2.cvtColor(blur_copy,cv2.COLOR_BGR2GRAY)binary=cv2.Canny(gray,50,150) #Canny邊緣檢測(cè)#使用霍夫變換檢測(cè)直線lines=cv2.HoughLines(binary,1,np.pi/180,150)霍夫變換>霍夫直線變換【參考代碼】forlineinlines:

#遍歷所有直線 rho,theta=line[0] a=np.cos(theta) b=np.sin(theta) x0,y0=a*rho,b*rho pt1=(int(x0+1000*(-b)),int(y0+1000*a)) #計(jì)算線段端點(diǎn) pt2=(int(x0-1000*(-b)),int(y0-1000*a)) #計(jì)算線段端點(diǎn) cv2.line(image,pt1,pt2,(0,0,255),2) #在原圖像上繪制直線cv2.imshow("HoughLines",image)

#顯示霍夫變換后的圖像cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows()

#釋放所有窗口霍夫變換>霍夫直線變換【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示?;舴蜃儞Q>霍夫直線變換(a)原圖像

(b)霍夫直線變換后的圖像

霍夫變換>霍夫直線變換OpenCV還提供了什么函數(shù)可以實(shí)現(xiàn)霍夫變換?該函數(shù)有什么特點(diǎn)?OpenCV

提供的cv2.HoughLinesP()函數(shù)也可以進(jìn)行霍夫直線變換,該函數(shù)沒有考慮所有點(diǎn),只分析一個(gè)足以進(jìn)行直線檢測(cè)的隨機(jī)點(diǎn)的子集,并計(jì)算這些點(diǎn)都屬于一條直線的概率,它是

cv2.HoughLines()函數(shù)的優(yōu)化版本。cv2.HoughLinesP()函數(shù)計(jì)算成本低,執(zhí)行速度更快,但準(zhǔn)確度有一定程度的下降?;舴蜃儞Q>霍夫圓變換circles表示輸出向量,即檢測(cè)到的圓的列表,每個(gè)圓以(x,y,radius)的形式表示,(x,y)為圓心的坐標(biāo),radius為圓的半徑;src表示輸入圖像,為灰度圖像;method表示檢測(cè)方法,OpenCV中常用的方法為HOUGH_GRADIENT(霍夫梯度法);OpenCV提供的cv2.HoughCircles()函數(shù)用于使用霍夫變換算法來檢測(cè)圖像中的圓。格式:circles=cv2.HoughCircles(src,method,dp,minDist[,param1=100[,param2=100

[,minRadius=0[,maxRadius=0]]]])cv2.HoughCircles()函數(shù)霍夫變換>霍夫圓變換dp表示檢測(cè)到的圓的分辨率與圖像分辨率之間的比例,若

dp

1,則檢測(cè)到的圓的分辨率與輸入圖像相同,若dp為2,則檢測(cè)到的圓的分辨率降低為輸入圖像的一半;minDist表示圓心間的最小距離;param1表示Canny邊緣檢測(cè)使用的高閾值(低閾值為高閾值的一半),為可選參數(shù),默認(rèn)為100;param2表示檢測(cè)圓的累加器閾值,為可選參數(shù),默認(rèn)為100;minRadius表示圓的最小半徑,即半徑小于該值的圓不會(huì)被檢測(cè)出來,為可選參數(shù),默認(rèn)為0,此時(shí)不起作用;maxRadius表示圓的最大半徑,即半徑大于該值的圓不會(huì)被檢測(cè)出來,為可選參數(shù),默認(rèn)為0,此時(shí)不起作用。參數(shù)說明【例5-10】編寫程序,使用OpenCV的cv2.HoughCircles()函數(shù)對(duì)圖像“weiqi.png”(見本書配套素材“例題圖像/weiqi.png”)進(jìn)行霍夫變換,檢測(cè)圖像中的圓,并顯示原圖像和霍夫圓變換后的圖像?!緟⒖即a】importcv2 #導(dǎo)入OpenCV庫(kù)importnumpyasnp #導(dǎo)入NumPy庫(kù)image=cv2.imread('weiqi.png') #讀取原圖像cv2.imshow("Input",image) #顯示原圖像img_copy=image.copy() #復(fù)制原圖像blur_copy=cv2.medianBlur(img_copy,5)

#使用中值濾波進(jìn)行降噪gray=cv2.cvtColor(blur_copy,cv2.COLOR_BGR2GRAY)霍夫變換>霍夫圓變換【參考代碼】#使用霍夫變換檢測(cè)圓circles=cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,70,param1=100,param2=25,minRadius=10,maxRadius=50)circles=np.uint(np.around(circles))

#將數(shù)組元素四舍五入為整數(shù)forcincircles[0]: #遍歷每個(gè)圓 x,y,r=c #圓心橫坐標(biāo)、縱坐標(biāo)和圓半徑 cv2.circle(image,(x,y),r,(255,0,0),3) #繪制圓 cv2.circle(image,(x,y),2,(0,0,255),3) #繪制圓心cv2.imshow("HoughCircles",image) #顯示霍夫變換后的圖像cv2.waitKey() #窗口等待,按任意鍵繼續(xù)cv2.destroyAllWindows() #釋放所有窗口霍夫變換>霍夫直線變換【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如下圖所示?;舴蜃儞Q>霍夫直線變換(a)原圖像

(b)霍夫圓變換后的圖像

04項(xiàng)目實(shí)施項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類>項(xiàng)目分析交通標(biāo)志形狀識(shí)別與分類第一步第二步第三步圖像預(yù)處理輪廓查找與繪制形狀識(shí)別與分類項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類>項(xiàng)目分析>1.圖像預(yù)處理第一步導(dǎo)入本項(xiàng)目所需的模塊與包。第二步定義原圖像文件存放位置變量img_path,然后讀取原圖像文件,并顯示原圖像。第三步將原圖像復(fù)制到imgContour文件中。第四步調(diào)用cv2.cvtColor()函數(shù)將原圖像的色彩空間從BGR轉(zhuǎn)換為GRAY。第五步進(jìn)行高斯濾波,濾波模板大小為5×5,濾波模板在水平方向的標(biāo)準(zhǔn)差為

1,并顯示濾波后的圖像。項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類>項(xiàng)目分析>2.輪廓查找與繪制步驟1步驟2設(shè)置低閾值為

70、高閾值為

200,對(duì)高斯濾波后的圖像進(jìn)行

Canny

邊緣檢測(cè),并顯示邊緣檢測(cè)后的圖像。查找圖像最外層的輪廓,并保存輪廓信息。步驟3根據(jù)輪廓查找的結(jié)果,繪制輪廓,并顯示繪制輪廓后的圖像。步驟1項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類>項(xiàng)目分析>3.形狀識(shí)別與分類根據(jù)輪廓查找的結(jié)果,循環(huán)遍歷每個(gè)輪廓,對(duì)每個(gè)輪廓進(jìn)行形狀識(shí)別與分類。①調(diào)用cv2.arcLength()函數(shù)計(jì)算輪廓的周長(zhǎng);②調(diào)用cv2.approxPolyDP()函數(shù)獲得輪廓的近似多邊形;③計(jì)算輪廓頂點(diǎn)的數(shù)量;④計(jì)算輪廓的矩形包圍框,返回該矩形包圍框的左上角頂點(diǎn)的坐標(biāo)值及矩形的寬度和高度;⑤根據(jù)輪廓的頂點(diǎn)數(shù)量進(jìn)行輪廓形狀識(shí)別,若輪廓的頂點(diǎn)數(shù)量為

3,則輪廓的形狀為三角形,交通標(biāo)志為警示標(biāo)志(即“WarningSign”),若輪廓的頂點(diǎn)數(shù)量為

4,則輪廓的形狀為矩形,交通標(biāo)志為指示標(biāo)志(即“IndicativeSign”),若輪廓的頂點(diǎn)數(shù)量大于4且輪廓的圓形度大于0.8,則輪廓的形狀為圓形,交通標(biāo)志為限速標(biāo)志(即“SpeedLimit”);⑥為輪廓繪制矩形框;⑦為輪廓添加交通標(biāo)志類型文本。項(xiàng)目實(shí)施——交通標(biāo)志形狀識(shí)別與分類>項(xiàng)目分析>3.形狀識(shí)別與分類步驟2步驟3顯示添加文本后的圖像。窗口等待,按任意鍵繼續(xù),并釋放所有窗口。圓形度是指一個(gè)圖形與圓形的相似程度或接近程度。常用的基于面積和周長(zhǎng)的計(jì)算圓形度公式如下:其中,c表示圓形度;area表示圓的面積;perimeter表示圓的周長(zhǎng)。[指點(diǎn)迷津]05項(xiàng)目實(shí)訓(xùn)1.實(shí)訓(xùn)目的熟練使用OpenCV進(jìn)行圖像的邊緣檢測(cè)。1項(xiàng)目實(shí)訓(xùn)>1.實(shí)訓(xùn)目的2熟練使用OpenCV進(jìn)行圖像輪廓的查找與繪制。3熟練使用OpenCV進(jìn)行圖像輪廓的查找與繪制。圖像“toy.png”(見本書配套素材“Train\toy.png”)中有正方形、長(zhǎng)方形、三角形、圓形和多邊形5種形狀,根據(jù)輪廓特征及輪廓所包圍對(duì)象的特征,對(duì)5種形狀的輪廓進(jìn)行分類,并將形狀類型文本添加在圖像中。項(xiàng)目實(shí)訓(xùn)>2.實(shí)訓(xùn)內(nèi)容(1)數(shù)據(jù)準(zhǔn)備①導(dǎo)入本項(xiàng)目需要的OpenCV和NumPy。②讀取原圖像文件,并顯示原圖像。③將原圖像復(fù)制到imgContour文件中。④調(diào)用cv2.cvtColor()函數(shù)將原圖像的色彩空間從BGR轉(zhuǎn)換為GRAY。⑤進(jìn)行高斯濾波,濾波模板大小為

5×5,濾波模板在水平方向的標(biāo)準(zhǔn)差為1,并顯示濾波后的圖像。OpenCV項(xiàng)目實(shí)訓(xùn)>2.實(shí)訓(xùn)內(nèi)容(2)輪廓查找與繪制①

設(shè)置低閾值為70、高閾值為200,對(duì)高斯濾波后的圖像進(jìn)行Canny邊緣檢測(cè),并顯示邊緣檢測(cè)后的圖像。②

查找圖像最外層的輪廓,并保存輪廓信息。③

根據(jù)輪廓查找的結(jié)果,繪制輪廓,并顯示繪制輪廓后的圖像。項(xiàng)目實(shí)訓(xùn)>2.實(shí)訓(xùn)內(nèi)容(3)形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論