計算機基礎項目實戰6_第1頁
計算機基礎項目實戰6_第2頁
計算機基礎項目實戰6_第3頁
計算機基礎項目實戰6_第4頁
計算機基礎項目實戰6_第5頁
已閱讀5頁,還剩93頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

計算機視覺項目開發實戰

(微課版)項目四車牌識別—形態學處理與輪廓檢測思維導圖學習目標概覽能夠使用OpenCV庫實現圖像的全局閾值處理和自適應閾值處理知識目標學習目標素養目標技能目標培養交通安全意識培養社會責任感培養法治精神能夠運用形態學變換對圖像進行去噪、分割等預處理操作,優化圖像質量能夠使用Sobel、Laplacian、Canny等邊緣檢測算法提取圖像的邊緣信息理解圖像閾值處理的核心思想,掌握不同閾值處理方法的適用場景及優缺點掌握形態學變換的核心思想,掌握不同形態學操作的作用掌握查找、繪制圖像輪廓及分析輪廓特征的基本方法理解邊緣檢測算法的原理,熟悉不同邊緣檢測算法的特點及應用場景能夠查找、繪制圖像的輪廓,并分析輪廓特征目錄項目導入知識準備項目拓展項目實施項目鞏固4.1閾值處理4.2形態學變換4.3圖像輪廓4.4邊緣檢測PART01項目導入項目導入在智慧交通系統中,車牌作為車輛的“數字身份證”,其精準識別與合規使用已成為城市治理現代化的重要支撐。從技術實現路徑看,車牌識別經歷了從依賴閾值、形態學等的傳統數字圖像處理,到基于深度學習的端到端智能識別的技術演進。秉持技術向善的理念,明確技術應用的邊界PART02知識準備知識準備—閾值處理4.1.1全局閾值處理全局閾值處理是指為整幅圖像選取一個固定的數值T作為閾值,所有像素都依據此統一標準進行分類。OpenCV提供了cv2.threshold()函數來進行全局閾值處理。其語法格式如下:其中各參數含義如下。src:輸入圖像(通常為灰度圖像),支持CV_8U、CV_32F等數據類型。thresh:設定的閾值。maxval:當像素值超過(或低于)閾值時,需要賦予的新值,僅用于THRESH_BINARY和THRESH_BINARY_INV類型。retval:返回值,如果非自動獲取閾值,最后的retval和設定的thresh相等,而如果是自動獲取閾值,返回的是使用自動獲取閾值算法得到的閾值。dst:輸出圖像,與輸入圖像具有相同的尺寸、類型和通道數。retval,dst=cv2.threshold(src,thresh,maxval,type[,dst])知識準備—閾值處理4.1.1全局閾值處理type:閾值處理類型。常見閾值處理類型如表4-1所示。知識準備—閾值處理4.1.1全局閾值處理—案例

【例4-1】讀取一幅圖像,并將其轉換為單通道灰度圖像。然后利用cv2.threshold()函數,針對固定閾值(127)演示5種基礎閾值處理類型的處理效果。同時,將OTSU和TRIANGLE分別與THRESH_BINARY及THRESH_BINARY_INV規則組合,展示自動閾值分割的效果,并進行可視化。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-1.py見教材配套代碼,路徑如下:src/proj04/ex4-1.py知識準備—閾值處理4.1.1全局閾值處理—案例運行本例的代碼,結果如圖4-1所示。圖4-1例4-1代碼運行結果知識準備—閾值處理4.1.2自適應閾值處理自適應閾值處理是解決圖像光照不均問題的重要技術,它通過動態調整圖像不同區域的閾值,使每個局部區域的二值化更符合該區域的灰度分布。OpenCV提供了cv2.adaptiveThreshold()函數來實現自適應閾值處理。其語法格式如下:其中各參數含義如下。src:輸入圖像,必須是8位單通道的灰度圖像。maxValue:滿足條件的像素被賦予的非零值,通常為255。thresholdType:閾值處理類型。必須是THRESH_BINARY或THRESH_BINARY_INV。blockSize:用于計算像素閾值的鄰域像素尺寸,值通常為3、5、7等,必須是正奇數。C:從算術平均值或加權平均值中減去的常數,通常為正值,但也可以為零或負值。dst:輸出圖像,與輸入圖像具有相同尺寸和類型。dst=cv2.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C[,dst])知識準備—閾值處理4.1.2自適應閾值處理adaptiveMethod:使用的自適應閾值算法。常見自適應閾值處理算法如表4-2所示。知識準備—閾值處理4.1.2自適應閾值處理—案例

【例4-2】讀取一幅圖像,并將圖像轉換為單通道灰度圖像,然后利用cv2.adaptiveThreshold()函數,對比全局閾值處理(OTSU)和兩種自適應閾值處理方法的效果。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-2.py見教材配套代碼,路徑如下:src/proj04/ex4-2.py知識準備—閾值處理4.1.2自適應閾值處理—案例運行本例的代碼,結果如圖4-2所示。圖4-2例4-2代碼運行結果知識準備—形態學變換形態學變換是一種基于目標形狀進行處理的圖像分析技術。其核心思想是使用一個被稱為結構元素(或核)的預定義模板,在圖像上系統性地移動并進行邏輯運算(如基礎的腐蝕、膨脹),從而精細地調整、分析或提取圖像中目標的形態特征,如大小、輪廓和連通性。形態學變換主要應用于二值圖像(常由閾值處理得到),用于后續的去噪、連接斷點、分離物體、提取邊界及形狀骨架等,也可推廣至灰度圖像處理。結構元素是實現所有形態學變換操作的關鍵。它本質上是一個由0和1(代表不參與和參與計算)構成的小型二維矩陣,其形狀(如矩形、十字形、橢圓形)和大小決定了運算的效果。知識準備—形態學變換OpenCV提供了cv2.getStructuringElement()函數來快速生成標準化的結構元素。其語法格式如下:其中各參數含義如下。ksize:以元組形式(width,height)表示的結構元素尺寸,必須為正奇數,確保結構元素有唯一的中心像素(錨點默認在中心),避免對稱偏移。anchor:結構元素內的錨點位置。默認值(-1,-1)表示錨點位于中心,為可選項。請注意,只有十字形結構元素的形狀會受錨點位置影響,在其他情況下錨點僅調節形態學操作結果的偏移量。retval:返回值,是一個numpy.ndarray類型的二維數組。retval=cv2.getStructuringElement(shape,ksize[,anchor])知識準備—形態學變換shape:結構元素的形狀。結構元素的常見形狀如表4-3所示。知識準備—形態學變換4.2.1腐蝕腐蝕的本質是用“結構元素”(又稱“核”)作為“工具”,對圖像中的前景區域進行“收縮”處理。OpenCV提供了cv2.erode()函數來對圖像進行腐蝕處理。其語法格式如下:其中各參數含義如下。src:輸入圖像,通道數可以是任意的。kernel:用于進行腐蝕操作的結構元素。anchor:結構元素內的錨點位置;默認值(-1,-1)表示錨點位于結構元素中心。iterations:進行腐蝕操作的次數。次數越多,腐蝕效果越明顯。borderType:邊界類型,像素外推方法。borderValue:使用常量邊界時的邊界值。dst:輸出圖像,與輸入圖像具有相同尺寸和類型。dst=cv2.erode(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])知識準備—形態學變換4.2.1腐蝕—案例

【例4-3】使用OpenCV的cv2.erode()函數實現腐蝕操作。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-3.py見教材配套代碼,路徑如下:src/proj04/ex4-3.py知識準備—形態學變換4.2.1腐蝕—案例

【例4-3】使用OpenCV的cv2.erode()函數實現腐蝕操作。運行本例的代碼,結果如圖4-3所示。圖4-3例4-3代碼運行結果知識準備—形態學變換4.2.2膨脹膨脹是與腐蝕操作相對的基礎形態學變換,是用“結構元素”(核)作為“工具”,對圖像中的前景區域進行“擴張”處理。OpenCV提供了cv2.dilate()函數來對圖像進行膨脹處理。其語法格式如下:其中各參數含義與cv2.erode()函數一致。dst=cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])知識準備—形態學變換4.2.2膨脹—案例

【例4-4】使用OpenCV的cv2.dilate()函數實現膨脹操作。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-4.py見教材配套代碼,路徑如下:src/proj04/ex4-4.py知識準備—形態學變換4.2.2膨脹—案例

【例4-4】使用OpenCV的cv2.erode()函數實現腐蝕操作。運行本例的代碼,結果如圖4-4所示。圖4-4例4-4代碼運行結果知識準備—形態學變換4.2.3高級形態學操作高級形態學操作是基于腐蝕和膨脹的復合操作,通過組合這兩種基礎操作,可實現更復雜的形態調整,如去噪、補洞、邊緣提取等。OpenCV提供了cv2.morphologyEx()函數來進行高級形態學操作。其語法格式如下:其中各參數含義如下。src:輸入圖像。對于二值或灰度形態學操作,通常為單通道圖像。kernel:用于進行形態學操作的結構元素。anchor:結構元素內的錨點位置。默認值為(-1,-1),表示錨點位于結構元素中心。iterations:迭代次數。腐蝕和膨脹操作的次數。borderType:邊界類型,像素外推方法。borderValue:使用常量邊界時的邊界值。dst:輸出圖像,與輸入圖像具有相同的大小和類型。dst=cv2.morphologyEx(src,op,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])知識準備—形態學變換4.2.3高級形態學操作op:形態學操作的類型。常見形態學操作類型如表4-4所示。知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-5.py見教材配套代碼,路徑如下:src/proj04/ex4-5.py知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。運行本例的代碼,結果如圖4-5至圖4-9所示。圖4-5例4-5代碼中開運算結果(a)源圖像

(b)3×3矩形核處理

(c)5×5橢圓核處理

(d)5×5十字形核處理知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。運行本例的代碼,結果如圖4-5至圖4-9所示。圖4-6例4-5代碼中閉運算結果(a)源圖像

(b)3×3矩形核處理

(c)5×5橢圓核處理

(d)5×5十字形核處理知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。運行本例的代碼,結果如圖4-5至圖4-9所示。圖4-7例4-5代碼中梯度運算結果(a)源圖像

(b)3×3矩形核處理

(c)5×5橢圓核處理

(d)5×5十字形核處理知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。運行本例的代碼,結果如圖4-5至圖4-9所示。圖4-8例4-5代碼中頂帽運算結果(a)源圖像

(b)3×3矩形核處理

(c)5×5橢圓核處理

(d)5×5十字形核處理知識準備—形態學變換4.2.3高級形態學操作—案例

【例4-5】使用OpenCV的cv2.morphologyEx()函數實現各種高級形態學操作并對比效果。運行本例的代碼,結果如圖4-5至圖4-9所示。圖4-9例4-5代碼中黑帽運算結果(a)源圖像

(b)3×3矩形核處理

(c)5×5橢圓核處理

(d)5×5十字形核處理知識準備—形態學變換4.2.3高級形態學操作知識準備—圖像輪廓4.3.1查找輪廓在計算機視覺和圖像處理中,圖像輪廓通常指一條由一系列點連接而成的曲線,用于勾畫圖像中目標物體的外形。OpenCV提供了cv2.findContours()函數來查找輪廓。其語法格式如下:其中各參數含義如下。image:8位單通道圖像,通常為二值圖像。contours:返回的輪廓信息,是構成每個輪廓的一系列坐標點集合。hierarchy:返回的輪廓層級信息。contours,hierarchy=cv2.findContours(image,mode,method[,contours[,hierarchy[,offset]]])知識準備—圖像輪廓4.3.1查找輪廓mode:輪廓檢索模式。常見輪廓檢索模式如表4-6所示。知識準備—圖像輪廓4.3.1查找輪廓method:輪廓逼近方法。常見輪廓逼近方法如表4-7所示。知識準備—圖像輪廓4.3.1查找輪廓—案例

【例4-6】使用OpenCV的cv2.findContours()函數查找圖像的所有輪廓。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-6.py見教材配套代碼,路徑如下:src/proj04/ex4-6.py知識準備—圖像輪廓4.3.1查找輪廓—案例

【例4-6】使用OpenCV的cv2.findContours()函數查找圖像的所有輪廓。運行本例的代碼,輸出如下結果:知識準備—圖像輪廓4.3.2繪制輪廓在圖像中查找到輪廓后,可以按要求繪制輪廓。OpenCV提供了cv2.drawContours()函數來繪制輪廓。其語法格式如下:其中各參數含義如下。image:繪制輪廓的目標圖像。contours:所有輸入圖像的輪廓。每個輪廓存儲為一個點向量。contourIdx:指定要繪制的輪廓索引。如果為負值,則繪制所有輪廓。color:繪制輪廓所用的顏色。thickness:繪制輪廓的線條粗細。如果為負值,則繪制輪廓內部填充區域。hierarchy:輪廓的層級信息,可選項。maxLevel:繪制輪廓的最大層級。offset:輪廓偏移參數,可選項。將繪制的所有輪廓按指定的偏移量進行平移。image=cv2.drawContours(image,contours,contourIdx,color[,thickness[,lineType[,hierarchy[,maxLevel[,offset]]]]])知識準備—圖像輪廓4.3.2繪制輪廓—案例

【例4-7】使用OpenCV的cv2.drawContours()函數繪制圖像所有輪廓。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-7.py見教材配套代碼,路徑如下:src/proj04/ex4-7.py知識準備—圖像輪廓4.3.2繪制輪廓—案例

【例4-7】使用OpenCV的cv2.drawContours()函數繪制圖像所有輪廓。運行上述代碼,結果如圖4-10所示。圖4-10例4-7代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征在圖像處理和計算機視覺中,矩特征是描述物體形狀、大小、位置及分布特性的重要數學工具。它通過對圖像像素的灰度值進行加權求和,構建一系列矩量,從而量化物體的幾何屬性。

矩特征具有可平移、可旋轉、尺度不變性等特性,廣泛用于形狀識別、目標分類、姿態估計等任務。根據計算方式和用途,矩可分為原始矩(RawMoment)、中心矩(CentralMoment)、歸一化中心矩(NormalizedCentralMoment)等,不同矩描述的特征不同。幾何特征——利用矩特征計算輪廓面積、重心知識準備—圖像輪廓4.3.3輪廓特征(1)原始矩幾何特征——利用矩特征計算輪廓面積、重心原始矩是直接基于像素坐標計算得到的矩,主要描述物體的位置和大小。其中:零階矩m00:等于目標的像素數量,即面積;對于灰度圖像,是目標區域的灰度值總和。一階矩m10、m01

:結合零階矩可計算重心坐標,公式如下。,知識準備—圖像輪廓4.3.3輪廓特征(2)中心矩幾何特征——利用矩特征計算輪廓面積、重心中心矩是以重心為原點計算得到的矩,描述物體的形狀分布范圍,可用于計算物體的主軸方向、寬高比等,消除平移對特征的影響。其中:μ20:沿x軸的分布慣性(目標在x軸方向的拉伸程度)。μ02:沿y軸的分布慣性(目標在y軸方向的拉伸程度)。μ11:描述x軸和y軸方向的相關性(目標的傾斜程度)。,知識準備—圖像輪廓4.3.3輪廓特征(3)歸一化中心矩幾何特征——利用矩特征計算輪廓面積、重心歸一化中心矩通過除以零階矩的冪次消除尺度影響,具有可平移、可旋轉、尺度不變性等特性,是形狀匹配的核心特征。,知識準備—圖像輪廓4.3.3輪廓特征OpenCV提供了cv2.moments()函數,可直接計算輪廓的原始矩、中心矩等,并返回一個包含多類矩特征的字典。其語法格式如下:幾何特征——利用矩特征計算輪廓面積、重心retval=cv2.moments(array[,binaryImage])其中各參數含義如下。array:單通道柵格圖像或由二維點(Point或Point2f)組成的數組。binaryImage:如果設置為True,所有非零圖像像素都會被當作1處理。retval:返回值,一個包含24個圖像矩的字典。知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——利用矩特征計算輪廓面積、重心

【例4-8】使用OpenCV的cv2.moments()函數獲取輪廓矩特征并計算輪廓面積、重心。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-8.py見教材配套代碼,路徑如下:src/proj04/ex4-8.py知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——利用矩特征計算輪廓面積、重心

【例4-8】使用OpenCV的cv2.moments()函數獲取輪廓矩特征并計算輪廓面積、重心。運行上述代碼,結果如圖4-11所示。同時,輸出矩特征的值,通過對比和觀察可以加深理解。圖4-11例4-8代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征OpenCV提供cv2.contourArea()函數用于計算輪廓面積。其語法格式如下:幾何特征——利用函數計算輪廓面積、周長retval=cv2.contourArea(contour[,oriented])其中各參數含義如下。contour:輪廓頂點坐標的集合,可以是點向量或矩陣形式。oriented:有符號面積標志。如果設置為True,函數將返回一個有符號的面積值,面積值的正負取決于輪廓的方向。默認情況下,該參數設置為False,表示返回絕對值。retval:double類型的面積值。知識準備—圖像輪廓4.3.3輪廓特征OpenCV提供cv2.arcLength()函數用于計算輪廓周長。其語法格式如下:幾何特征——利用函數計算輪廓面積、周長retval=cv2.arcLength(curve,closed)其中各參數含義如下。curve:曲線點坐標的集合,可以是點向量或矩陣形式。closed:布爾標志,表示曲線是否形成閉合形狀。retval:輪廓或曲線的長度,浮點型。知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——利用函數計算輪廓面積、周長

【例4-9】使用OpenCV的cv2.contourArea()函數和cv2.arcLength()函數計算輪廓面積和周長。根據題目要求,編寫代碼如下:源代碼地址文件

ex4-9.py見教材配套代碼,路徑如下:src/proj04/ex4-9.py知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——利用函數計算輪廓面積、周長

【例4-9】使用OpenCV的cv2.contourArea()函數和cv2.arcLength()函數計算輪廓面積和周長。運行本例的代碼,結果如圖4-12所示。同時,輸出通過函數計算得到的輪廓面積和周長,可以對比和觀察輪廓面積與例4-8中通過矩特征得到的面積是否相等。圖4-12例4-9代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征(1)外接矩形(BoundingRectangle)外接矩形主要應用于物體檢測、ROI指定、碰撞檢測,計算簡單快速。求外接矩形的函數語法格式如下:幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓retval=cv2.boundingRect(array)其中各參數含義如下。array:輪廓數組(由cv2.findContours返回的單個輪廓,形狀為(n,1,2)的numpy數組,n為輪廓點數量)。retval:元組類型的返回值,形式為(x,y,w,h),其中x、y是矩形左上角頂點的坐標,w、h是矩形的寬度和高度。知識準備—圖像輪廓4.3.3輪廓特征(2)最小外接矩形(MinimumBoundingRectangle)最小外接矩形主要應用于文本檢測、車牌識別、方向估計等場景。求最小外接矩形的函數語法格式如下:幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓retval=cv2.minAreaRect(points)其中各參數含義如下。points:二維坐標點的集合。retval:元組類型的返回值,形式為((cx,cy),(w,h),angle),其中(cx,cy)是矩形中心的坐標,w、h是矩形的寬度和高度,angle是矩形的旋轉角度,表示矩形繞中心逆時針旋轉的角度,范圍為[-90,0)。知識準備—圖像輪廓4.3.3輪廓特征(2)最小外接矩形(MinimumBoundingRectangle)要繪制最小外接矩形,需要將返回值retval轉換為4個頂點的坐標,OpenCV提供了cv2.boxPoints()函數進行轉換。其語法格式如下:幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓points=cv2.boxPoints(box[,points])其中各參數含義如下。box:旋轉矩形對象,通常來自cv2.minAreaRect()的返回值。points:用于存儲矩形4個頂點的輸出數組。知識準備—圖像輪廓4.3.3輪廓特征(3)最小外接圓(MinimumEnclosingCircle)最小外接圓是一個完全包含輪廓的最小圓形,主要應用于圓形物體檢測、大小估計等場景。求最小外接圓的函數語法格式如下:幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓center,radius=cv2.minEnclosingCircle(points)其中各參數含義如下。points:二維坐標點的集合。center:元組類型的返回值,形式為(cx,cy),表示圓心的坐標。radius:圓的半徑。知識準備—圖像輪廓4.3.3輪廓特征(4)擬合橢圓(EllipseFitting)擬合橢圓主要應用于橢圓物體分析、方向檢測等場景。求擬合橢圓的函數語法格式如下:幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓retval=cv2.fitEllipse(points)其中各參數含義如下。points:二維坐標點的集合,至少需要5個輪廓點。retval:元組類型的返回值,形式為((cx,cy),(a,b),angle),其中(cx,cy)是橢圓中心的坐標,a、b是橢圓的長軸和短軸長度,angle是橢圓長軸與x軸的夾角,范圍為[0,180)。知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓

【例4-10】使用OpenCV的函數分別繪制輪廓的外接矩形、最小外接矩形、最小外接圓和擬合橢圓。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-10.py見教材配套代碼,路徑如下:src/proj04/ex4-10.py知識準備—圖像輪廓4.3.3輪廓特征—案例幾何特征——外接矩形、最小外接矩形、最小外接圓、擬合橢圓

【例4-10】使用OpenCV的函數分別繪制輪廓的外接矩形、最小外接矩形、最小外接圓和擬合橢圓。運行本例的代碼,結果如圖4-13所示。圖4-13例4-10代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征OpenCV提供了cv2.approxPolyDP()函數來構造指定精度的逼近多邊形曲線。

其語法格式如下:形狀特征——逼近多邊形approxCurve=cv2.approxPolyDP(curve,epsilon,closed[,approxCurve])其中各參數含義如下。curve:輸入曲線的二維坐標點的集合。epsilon:近似精度參數,即原始曲線與近似曲線之間的最大距離。其值越小,近似結果越接近原始形狀,通常取值為周長的0.01~0.05。closed:布爾值,指定曲線是否閉合。approxCurve:返回值,多邊形近似頂點集合。知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——逼近多邊形

【例4-11】使用OpenCV的cv2.approxPolyDP()函數分別繪制輪廓的逼近多邊形。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-11.py見教材配套代碼,路徑如下:src/proj04/ex4-11.py知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——逼近多邊形

【例4-11】使用OpenCV的cv2.approxPolyDP()函數分別繪制輪廓的逼近多邊形。運行本例的代碼,結果如圖4-14所示。圖4-14例4-11代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征在圖像形狀分析中,凸包(ConvexHull)和凸性檢測(ConvexityCheck)是描述輪廓幾何特征的核心工具。凸包能簡化復雜輪廓的形狀,保留關鍵凸性特征。

凸性檢測則用于判斷輪廓是否為凸形。二者結合可快速提取物體的宏觀形狀特征,廣泛應用于目標識別、手勢分析、工業檢測等領域。形狀特征——凸包、凸性檢測知識準備—圖像輪廓4.3.3輪廓特征(1)凸包對于平面上的一組點,如輪廓的頂點,凸包是包含所有點的最小凸多邊形。OpenCV提供cv2.convexHull()函數獲取輪廓的凸包。其語法格式如下:形狀特征——凸包、凸性檢測hull=cv2.convexHull(points[,hull[,clockwise[,returnPoints]]])其中各參數含義如下。points:輸入的二維坐標點的集合。hull:輸出的凸包。clockwise:方向標志,默認值為False。returnPoints:控制返回值hull的類型,默認值為True。知識準備—圖像輪廓4.3.3輪廓特征(2)凸性檢測凸性檢測用于判斷一個輪廓是否為凸形,即判斷輪廓上任意兩點的連線是否均在輪廓內部或邊界上。OpenCV提供cv2.isContourConvex()函數實施凸性檢測。其語法格式如下:形狀特征——凸包、凸性檢測hull=cv2.convexHull(points[,hull[,clockwise[,returnPoints]]])其中各參數含義如下。contour:輸入的輪廓,即由一系列頂點組成的閉合曲線。retval:布爾值。返回True表示輸入的輪廓是凸形,返回False表示輸入的輪廓非凸形。知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——凸包、凸性檢測

【例4-12】使用OpenCV的cv2.convexHull()函數獲取輪廓凸包,繪制輪廓,同時使用cv2.ContourConvex()函數判斷輪廓是否為凸形。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-12.py見教材配套代碼,路徑如下:src/proj04/ex4-12.py知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——凸包、凸性檢測

【例4-12】使用OpenCV的cv2.convexHull()函數獲取輪廓凸包,繪制輪廓,同時使用cv2.ContourConvex()函數判斷輪廓是否為凸形。運行本例的代碼,結果如圖4-15所示。同時,輸出輪廓凸性檢測結果。圖4-15例4-12代碼運行結果知識準備—圖像輪廓4.3.3輪廓特征(1)縱橫比縱橫比也稱為寬高比,描述輪廓的“細長程度”,通常用外接矩形的寬度與高度的比值表示。值越接近1,形狀越“方正”;值越偏離1,形狀越“細長”。

計算公式如下:形狀特征——橫比、緊密度、等效直徑知識準備—圖像輪廓4.3.3輪廓特征(2)緊密度緊密度也稱為“圓形度”,衡量輪廓與理想圓形的接近程度,值越接近1,輪廓越接近圓形。

計算公式如下:形狀特征——橫比、緊密度、等效直徑知識準備—圖像輪廓4.3.3輪廓特征(3)等效直徑等效直徑為與輪廓面積相等的圓形的直徑,用于量化輪廓的大小而不受形狀影響。例如,對于一個正方形和一個三角形,可通過等效直徑比較誰更大。

計算公式如下:形狀特征——橫比、緊密度、等效直徑知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——橫比、緊密度、等效直徑

【例4-13】計算圖像輪廓的各個特征值并進行適當的標注和可視化。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-13.py見教材配套代碼,路徑如下:src/proj04/ex4-13.py知識準備—圖像輪廓4.3.3輪廓特征—案例形狀特征——橫比、緊密度、等效直徑

【例4-13】計算圖像輪廓的各個特征值并進行適當的標注和可視化。運行本例的代碼,結果如圖4-16所示。同時,輸出各個輪廓的縱橫比、緊密度、等效直徑。圖4-16例4-13代碼運行結果知識準備—邊緣檢測邊緣檢測旨在識別圖像中物體的輪廓,其本質是定位像素灰度發生急劇變化的區域。常用的經典算法包括如下幾種。Sobel:基于一階梯度,通過分別計算x軸和y軸方向的近似導數來檢測邊緣。其特點是計算簡單快速,但檢測到的邊緣較粗,定位精度一般。Laplacian:基于二階導數,直接計算梯度的散度,從而實現各向同性的邊緣檢測(對各個方向響應一致)。其特點是對噪聲非常敏感,通常需要先進行高斯平滑預處理。Canny:一個多階段的優化算法,包含高斯濾波、梯度計算、非極大值抑制和雙閾值檢測與連接。其特點是能產生連續、單像素寬度、高精度的邊緣,是效果最優的標準算法之一,但計算相對復雜。知識準備—邊緣檢測4.4.1Sobel邊緣檢測OpenCV提供cv2.Sobel()函數實現Sobel邊緣檢測。其語法格式如下:其中各參數含義如下。src:輸入圖像,通常為單通道灰度圖像。ddepth:輸出圖像的深度,核心參數。dx:x軸方向的梯度階數。dy:y軸方向的梯度階數。ksize:Sobel算子的大小,默認值為3,必須為正奇數。scale:縮放因子,默認值為1,不縮放。delta:偏移量,默認值為0。borderType:邊界填充方式,與均值濾波、2D濾波的邊界填充方式一致。dst=cv2.Sobel(src,ddepth,dx,dy[,dst[,ksize[,scale[,delta[,borderType]]]]])知識準備—邊緣檢測4.4.1Sobel邊緣檢測—案例

【例4-14】讀取一幅圖像,使用cv2.Sobel()函數分別計算x軸方向、y軸方向的邊緣,合并兩個方向的邊緣結果,并對比不同核大小的檢測效果,展示Sobel邊緣檢測的方向特性。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-14.py見教材配套代碼,路徑如下:src/proj04/ex4-14.py知識準備—邊緣檢測4.4.1Sobel邊緣檢測—案例

【例4-14】讀取一幅圖像,使用cv2.Sobel()函數分別計算x軸方向、y軸方向的邊緣,合并兩個方向的邊緣結果,并對比不同核大小的檢測效果,展示Sobel邊緣檢測的方向特性。運行本例的代碼,結果如圖4-17所示。圖4-17例4-14代碼運行結果知識準備—邊緣檢測4.4.2Laplacian邊緣檢測OpenCV提供cv2.Laplacian()函數實現Laplacian邊緣檢測。其語法格式如下:其中各參數含義如下。ksize:Laplacian算子的大小,默認值為1,對應3×3核,必須為正奇數(如1、3、5、7);ksize越大,核覆蓋范圍越廣,抗噪聲能力越強,但邊緣細節越模糊。其他參數同Sobel算子。dst=cv2.Laplacian(src,ddepth[,dst[,ksize[,scale[,delta[,borderType]]]]])知識準備—邊緣檢測4.4.2Laplacian邊緣檢測—案例

【例4-15】讀取一幅圖像,先對其進行高斯平滑預處理,再使用cv2.Laplacian()函數對比“無預處理”與“有預處理”的邊緣檢測效果,同時展示不同核大小的影響,突出Laplacian邊緣檢測對噪聲的敏感性及預處理的必要性。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-15.py見教材配套代碼,路徑如下:src/proj04/ex4-15.py知識準備—邊緣檢測4.4.2Laplacian邊緣檢測—案例

【例4-15】讀取一幅圖像,先對其進行高斯平滑預處理,再使用cv2.Laplacian()函數對比“無預處理”與“有預處理”的邊緣檢測效果,同時展示不同核大小的影響,突出Laplacian邊緣檢測對噪聲的敏感性及預處理的必要性。運行本例的代碼,結果如圖4-18所示。圖4-18例4-15代碼運行結果知識準備—邊緣檢測4.4.3Canny邊緣檢測Canny邊緣檢測旨在解決傳統邊緣檢測算法存在的邊緣定位不準確、噪聲敏感度高以及邊緣斷裂等問題,以實現高精度、連續且單像素寬度的邊緣檢測效果。Canny邊緣檢測的實現流程包括以下4個核心步驟。①高斯平滑濾波。②梯度值與方向計算。③非極大值抑制。④雙閾值檢測與邊緣連接。知識準備—邊緣檢測4.4.3Canny邊緣檢測OpenCV提供cv2.Canny()函數實現高效的Canny邊緣檢測。其語法格式如下:其中各參數含義如下。image:輸入圖像,支持單通道灰度圖像或多通道彩色圖像。threshold1:低閾值。threshold2:高閾值。apertureSize:Sobel算子的大小,必須為正奇數,默認值為3。L2gradient:梯度值計算方法,布爾值;默認值為False。edges:輸出邊緣圖像,為單通道二值圖像,與輸入圖像尺寸一致。edges=cv2.Canny(image,threshold1,threshold2[,edges[,apertureSize[,L2gradient]]])知識準備—邊緣檢測4.4.3Canny邊緣檢測—案例

【例4-16】讀取一幅含細節與噪聲的圖像,使用cv2.Canny()函數進行處理,對比不同雙閾值組合的檢測效果,并與Sobel邊緣檢測結果對比,突出Canny邊緣檢測的精度優勢。根據題目要求,編寫程序的關鍵代碼如下:源代碼地址文件

ex4-16.py見教材配套代碼,路徑如下:src/proj04/ex4-16.py知識準備—邊緣檢測4.4.3Canny邊緣檢測—案例

【例4-16】讀取一幅含細節與噪聲的圖像,使用cv2.Canny()函數進行處理,對比不同雙閾值組合的檢測效果,并與Sobel邊緣檢測結果對比,突出Canny邊緣檢測的精度優勢。運行本例的代碼,結果如圖4-19所示。圖4-19例4-16代碼運行結果PART03項目實施項目實施項目任務在車輛圖像中定位車牌位置,并提取出車牌區域圖像。任務實現步驟1:圖像預處理首先讀取源車輛圖像并創建備份,然后將彩色圖像轉換為灰度圖像以降低計算復雜度,最后使用3×3的高斯濾波器對灰度圖像進行模糊處理,有效消除圖像中的噪聲干擾,為后續處理步驟奠定基礎。項目實施步驟1:圖像預處理具體代碼如下:圖4-20高斯濾波處理后的圖像本步驟的輸出如圖4-20所示。項目實施步驟2:邊緣檢測通過Sobel算子進行水平方向的邊緣檢測,突出圖像中的垂直邊緣特征,這對識別車牌的豎直字符邊界特別有效,然后將結果映射到0~255范圍內以便顯示和處理,增強車牌區域的輪廓特征。具體代碼如下:圖4-21邊緣檢測結果本步驟的輸出如圖4-21所示。項目實施步驟3:圖像二值化采用OTSU自適應閾值算法將經過邊緣檢測

溫馨提示

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

評論

0/150

提交評論