




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 助理廣告師考試消費(fèi)市場(chǎng)趨勢(shì)分析試題及答案
- 太原社區(qū)面試題及答案
- 全科醫(yī)學(xué)試題及答案詳解
- 地理西亞測(cè)試題及答案
- 2024年國(guó)際商業(yè)設(shè)計(jì)師考試備考要點(diǎn)試題及答案
- 助理廣告師考試數(shù)據(jù)分析基礎(chǔ)試題及答案
- c語(yǔ)言測(cè)試試題及答案
- 商業(yè)設(shè)計(jì)師考試全新試題及答案揭曉
- 2024年職稱考試紡織品檢驗(yàn)問答試題及答案
- 破解國(guó)際商業(yè)美術(shù)設(shè)計(jì)師考試難題試題及答案
- 數(shù)字貿(mào)易學(xué) 課件 第1章 導(dǎo)論
- 廣東省省級(jí)政務(wù)信息化(2024年第一批)項(xiàng)目需求-廣東省財(cái)政廳業(yè)務(wù)系統(tǒng)運(yùn)維運(yùn)營(yíng)服務(wù)(2024年)項(xiàng)目
- 寄拍行業(yè)分析
- 培訓(xùn)地坪漆課件
- 搪瓷制品的藝術(shù)創(chuàng)作與文化創(chuàng)意
- 江蘇開放大學(xué)2024年春《毛澤東思想和中國(guó)特色社會(huì)主義理論體系概論060878》實(shí)踐作業(yè)參考答案
- 標(biāo)書中人員配備方案
- 蛇咬傷的快速應(yīng)急方法
- 采購(gòu)管理教學(xué)第9講采購(gòu)環(huán)境與供應(yīng)市場(chǎng)分析課件
- 寧夏回族自治區(qū)勞動(dòng)合同(官方范本)
- 220kv交流輸電線路金具技術(shù)規(guī)范書
評(píng)論
0/150
提交評(píng)論