无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

Python OpenCV 影像處理:影像輪廓

2024-3-12 08:54| 发布者: 闪电| 查看: 4| 评论: 0

摘要: ►前言上篇介紹使用OpenCV Python對於圖像上的二值化操作,二值化主要用途包括圖像分割、物體偵測、文字識別等。這種轉換可以幫助檢測圖像中的物體或特定特徵,並提取有用的信息,本篇基於二值化操作進行近一步的操 ...
► 前言

上篇介紹使用OpenCV Python對於圖像上的二值化操作,二值化主要用途包括圖像分割、物體偵測、文字識別等。這種轉換可以幫助檢測圖像中的物體或特定特徵,並提取有用的信息,本篇基於二值化操作進行近一步的操作,透過影像梯度區分影像前景、後景,框選所需目標物件。透過程式碼的說明,讓各位了解OpenCV Python於圖像處理上的基本操作。

輪廓(Contour)定義

輪廓是由多個點組成的連續曲線或多邊形,這些點會包圍物體或形狀的邊界。輪廓描述了物體在影像中的外形和輪廓的形狀。這些輪廓提供了對物體形狀和結構的描述,可以識別和理解影像中的物體。

►輪廓檢測與繪製

OpenCV提供findContours()函數用於在二值化影像中尋找輪廓。


  1. image: 輸入的二值化圖像,通常是經過灰度轉換和二值化處理後的圖像。
  2. mode 輪廓檢測模式。它指定輪廓的檢索模式,可以使用以下值之一:
    • RETR_EXTERNAL:只檢測最外層的輪廓。
    • RETR_LIST:檢測所有的輪廓,但不建構輪廓的層次結構。
    • RETR_CCOMP:檢測所有的輪廓,並將其組織為兩級層次結構。
    • RETR_TREE:檢測所有的輪廓,並將其組織為完整的層次結構。
  3. method: 輪廓的逼近方法。它指定輪廓的逼近方法,可以使用以下值之一:
    • CHAIN_APPROX_NONE:儲存所有的輪廓點,不進行逼近。
    • CHAIN_APPROX_SIMPLE:僅儲存水平、垂直和對角線端點,壓縮水平、垂直和對角線節點,只保留該方向上的終點。
  4. contours(可選): 輪廓的輸出列表,每個輪廓是一個由點構成的 numpy 數組。
  5. hierarchy(可選): 輸出的層次結構,描述了輪廓之間的嵌套關係。
  6. offset(可選): 輸入圖像的可選偏移參數。

並透過drawContours()函數將輪廓疊加於原始圖像上。


  1. image: 用於繪製輪廓的圖像。
  2. contours: 要繪製的輪廓,是一個包含輪廓的列表,每個輪廓是一個由點構成的 numpy 數組。
  3. contourIdx: 指定要繪製的輪廓的索引。如果為負值(例如 -1),則繪製所有輪廓。
  4. color: 繪製輪廓的顏色。它是一個包含三個整數的元組,分別表示藍色、綠色和紅色通道的值。
  5. thickness(可選): 繪製輪廓的線條寬度。如果 thickness 為正值,表示線條的粗細;如果 thickness 為負值或者等於 0,則輪廓內部被填充。
  6. lineType(可選): 繪製輪廓的線條類型。預設為 LINE_8,表示 8 連通線條。你也可以使用 cv2.LINE_AA 以獲得抗鋸齒效果。
  7. hierarchy(可選): 描述輪廓層次結構的 numpy 數組。在 findContours 中獲取,通常不需要手動指定。
  8. maxLevel(可選): 繪製輪廓的最大層級。如果不指定,則繪製所有層級的輪廓。
  9. offset(可選): 輸入圖像的可選偏移參數。

在輪廓檢測與繪製分為以下四個步驟:

  • 讀取圖像並轉為灰度圖
  • 灰度圖像二值化
  • 檢測輪廓
  • 繪製輪廓



►輪廓周長與面積計算

在 OpenCV 中,可以使用 cv2.arcLength 函數來計算輪廓的周長,使用 cv2.contourArea 函數來計算輪廓的面積。


  • contour:要計算周長的輪廓。
  • closed:一個布爾值,表示輪廓是否是封閉的。如果是封閉的,則 closed 設為 True;如果不是封閉的,則設為 False

  • contour:要計算面積的輪廓。 
►小結
透過以上講解,搭配程式碼進行範例講解,相信各位對於圖像上的輪廓檢測能有更深刻的理解,期待下一篇博文吧!

Q&A

 問題一:圖像不是二值化的,如何進行輪廓檢測?
 
在進行輪廓檢測之前,必須將圖像轉換為二值化形式。可以使用灰度轉換和閾值處理來實現。確保你的圖像經過適當的預處理。

問題二:找不到預期的輪廓,檢測效果不好。

調整二值化的閾值或使用自適應閾值處理。有時候,圖像的光線和對比度變化可能導致檢測效果不佳,可以先進行適當的圖像增強。

問題三:圖像中有噪音或小的斑點,影響輪廓檢測。

在進行輪廓檢測之前,進行圖像平滑處理,例如使用高斯濾波器或中值濾波器,以減少噪音的影響。
 

問題四:輪廓太多或太少,難以準確識別目標。

調整二值化的閾值,以控制檢測到的輪廓數量。另外,可以使用形態學運算進行輪廓的調整和修復。

 

問題五:輪廓檢測後如何進一步處理找到的輪廓?

根據應用需求,可以使用輪廓的特性進行進一步的篩選、過濾或分析。例如,可以根據輪廓的面積、長寬比等進行篩選,以排除不需要的輪廓。


路过

雷人

握手

鲜花

鸡蛋

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2024-3-13 09:22 , Processed in 0.124800 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

返回顶部