《計算機視覺應用與實踐》課件-項目5 形狀識別_第1頁
《計算機視覺應用與實踐》課件-項目5 形狀識別_第2頁
《計算機視覺應用與實踐》課件-項目5 形狀識別_第3頁
《計算機視覺應用與實踐》課件-項目5 形狀識別_第4頁
《計算機視覺應用與實踐》課件-項目5 形狀識別_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

計算機視覺技術及應用下面為備注功能具體操作演示視頻形狀識別項目五

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

3~5

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

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

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

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

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

ksize表示Sobel算子的大小,須為?1、1、3、5或7,默認為3,當該值為?1時,則會使用Scharr算子進行運算;

scale表示計算導數(shù)時的縮放因子,為可選參數(shù),默認為1,即不進行縮放;

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

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

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

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

dst表示輸出圖像,即結果圖像;

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

alpha表示調節(jié)系數(shù),為可選參數(shù),默認為1,即不進行調節(jié);

beta表示調節(jié)偏移量,為可選參數(shù),默認為1,即不進行調節(jié)。在實際計算過程中,當梯度值為負數(shù)時,所有負數(shù)會自動截斷為0,造成圖像損失?!纠?-1】

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

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

?3?10?3?10010

000?303

3103(a)x軸算子

(b)y軸算子3×3

Scharr

算子【例

5-2】

編寫程序,對圖像“animal.png”(見本書配套素材“例題圖像/animal.png”)分別使用Sobel算子和Scharr算子進行邊緣檢測,并顯示原圖像和邊緣檢測后的圖像?!緟⒖即a】importcv2

#導入OpenCV庫image=cv2.imread('animal.png')

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

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

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

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

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

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

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

#加權求和運算cv2.imshow("Input",image)

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

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

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

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

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

(a)原圖像

(b)使用Sobel算子進行邊緣檢測

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

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

?1?1?11?41

?18?1010

?1?1?13×3

Laplacian算子【例

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

#導入OpenCV庫image=cv2.imread('blossom.png')

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

#求絕對值運算cv2.imshow("Input",image)

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

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

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

#釋放所有窗口邊緣檢測>圖像梯度>3.使用Laplacian算子進行邊緣檢測【運行結果】程序運行結果如下圖所示。邊緣檢測>圖像梯度>3.使用Laplacian算子進行邊緣檢測

(a)原圖像

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

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

5-4】

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

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

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

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

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

(a)原圖像

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

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

200的Canny邊緣檢測

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

600的Canny邊緣檢測

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

T

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

#導入OpenCV庫importnumpyasnp

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

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

#使用中值濾波進行降噪gray=cv2.cvtColor(blur_copy,cv2.COLOR_BGR2GRAY)binary=cv2.Canny(gray,50,150) #Canny邊緣檢測#使用霍夫變換檢測直線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)) #計算線段端點 pt2=(int(x0-1000*(-b)),int(y0-1000*a)) #計算線段端點 cv2.line(image,pt1,pt2,(0,0,255),2) #在原圖像上繪制直線cv2.imshow("HoughLines",image)

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

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

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

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

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

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

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

dp

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

#使用中值濾波進行降噪gray=cv2.cvtColor(blur_copy,cv2.COLOR_BGR2GRAY)霍夫變換>霍夫圓變換【參考代碼】#使用霍夫變換檢測圓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]: #遍歷每個圓 x,y,r=c #圓心橫坐標、縱坐標和圓半徑 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() #釋放所有窗口霍夫變換>霍夫直線變換【運行結果】程序運行結果如下圖所示?;舴蜃儞Q>霍夫直線變換(a)原圖像

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

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

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

70、高閾值為

200,對高斯濾波后的圖像進行

Canny

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

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

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

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

設置低閾值為70、高閾值為200,對高斯濾波后的圖像進行Canny邊緣檢測,并顯示邊緣檢測后的圖像。②

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論