[OpenCV基礎][Python]connectedComponent連通域分析

更新於 發佈於 閱讀時間約 4 分鐘


本篇文章主要講述cv2.connectedComponent應用於物件上的分割,將不同文字分割並用不同顏色標記。



範例程式結果圖

標示連通域結果

標示連通域結果


函式介紹

cv2.connectedComponentsWithStats

是 OpenCV 中用來執行連通元件標記的函式之一。

它的作用是將二值化的影像中的連通元件找出來,並給每個連通元件分配一個標籤,同時提供每個連通元件的統計信息,例如面積、中心點等。

函式的語法如下:

num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binaryImg, connectivity=8)


其中各參數的意義如下:

  • binaryImg:二值化的影像,黑白兩色分別表示目標物體和背景
  • connectivity:連通性,設置為 8 表示在水平、垂直和對角線方向均為連通。


函式的返回值包括:

  • num_labels:連通元件的數量(第一個標籤是代表背景的)。
  • labels:與輸入影像同大小的陣列,每個像素點的標籤值對應該像素所屬的連通元件
    ※注意標記的順序,是由左至右,由上至下的順序編號,若有物件在同一排略高就會先被優先標記。
  • stats:一個陣列,包含每個連通元件的統計信息,例如面積、外接矩形的大小等。
  • centroids:一個陣列,包含每個連通元件的中心點坐標。

這個函式在圖像分割物體檢測等領域中很常用,可以幫助我們識別圖像中的不同物體或區域

連通域標記示意圖

連通域標記示意圖


程式範例

import cv2
import numpy as np

# 讀取圖像
image = cv2.imread('輸入圖片路徑')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化處理
_, binaryImg = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 連通域分析
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binaryImg, connectivity=8)

# 設定不同顏色的標記
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255)]

# 繪製不同顏色的標記
for i in range(1, num_labels):
color = colors[i % len(colors)] # 循環選擇顏色
# 標記為指定的顏色
mask = labels == i
image[mask] = color

# 顯示結果
cv2.imshow('Connected Components', image)
cv2.waitKey(0)
cv2.destroyAllWindows()


標記為指定的顏色方法是為先創建一個mask的遮罩,然後在將遮罩內的值指定為想要的色

# 標記為指定的顏色
mask = labels == i
image[mask] = color
  1. mask = labels == i:這裡,我們創建了一個布林遮罩(boolean mask),這個遮罩的形狀與原始圖像相同。遮罩中的每個元素都是布林值(True或False),根據連通域分析的結果,如果某個像素屬於指定的連通區域(或物體),則對應位置為True,否則為False。labels == i的作用是找到與特定標籤(i)對應的像素。
  2. image[mask] = color:這一行程式碼的目的是將屬於特定連通區域的像素在原始圖像上標記為指定的顏色。通過布林遮罩mask,我們選擇了屬於特定連通區域的像素位置,然後將這些像素的值(即圖像中對應位置的像素)設置為指定的顏色color


avatar-img
131會員
218內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
針對辨識物的不同,流程就會不一樣,在依照現實狀況進行刪減,以下說明為個人常用的流程。 基本流程: 讀圖 灰階 濾波 (看圖片雜訊多不多) 二值化 連通區域 特徵篩選 特徵資訊 辨識 - (OCR,量測,瑕疵檢測等。) 名詞介紹 Gray 灰階 將原始的彩色圖像轉換為灰階圖
伽瑪校正(Gamma correction)被視為影像增強的一種方法之一。 通過調整 gamma 值,可以改變圖像的亮度和對比度,從而使圖像更清晰或更具有視覺效果。 以下將利用cv2.LUT及numpy的組合實現伽瑪校正,及詳細介紹cv2.LUT 函式應用。
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
[OpenCV應用][Python]找出圖像中的四個方位的邊緣點求出寬高 呈上篇應用Numpy找到的座標點,那我們如何捨棄掉差異過大的座標點呢? 可能圖像物件邊緣不佳,採樣就會差異過大,造成計算出的寬高是不準確的。 遇到這種狀況,就可以使用下方的程式範例來篩選座標點。 為求方便,此範例跟圖
使用反三角函數鐘的反正切函數 math.atan2() 計算出兩個座標之間的角度。 實現方法 邊界的最大最小值,相減求得對邊,鄰邊由檢測ROI的寬或高,求得角度 定義旋轉方向性,由邊界最大最小值的座標位子得知,旋轉方向性 程式範例 利用圖中白色物體的上邊界兩個座標點位,算出物體旋轉角度。
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
針對辨識物的不同,流程就會不一樣,在依照現實狀況進行刪減,以下說明為個人常用的流程。 基本流程: 讀圖 灰階 濾波 (看圖片雜訊多不多) 二值化 連通區域 特徵篩選 特徵資訊 辨識 - (OCR,量測,瑕疵檢測等。) 名詞介紹 Gray 灰階 將原始的彩色圖像轉換為灰階圖
伽瑪校正(Gamma correction)被視為影像增強的一種方法之一。 通過調整 gamma 值,可以改變圖像的亮度和對比度,從而使圖像更清晰或更具有視覺效果。 以下將利用cv2.LUT及numpy的組合實現伽瑪校正,及詳細介紹cv2.LUT 函式應用。
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
[OpenCV應用][Python]找出圖像中的四個方位的邊緣點求出寬高 呈上篇應用Numpy找到的座標點,那我們如何捨棄掉差異過大的座標點呢? 可能圖像物件邊緣不佳,採樣就會差異過大,造成計算出的寬高是不準確的。 遇到這種狀況,就可以使用下方的程式範例來篩選座標點。 為求方便,此範例跟圖
使用反三角函數鐘的反正切函數 math.atan2() 計算出兩個座標之間的角度。 實現方法 邊界的最大最小值,相減求得對邊,鄰邊由檢測ROI的寬或高,求得角度 定義旋轉方向性,由邊界最大最小值的座標位子得知,旋轉方向性 程式範例 利用圖中白色物體的上邊界兩個座標點位,算出物體旋轉角度。
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
開啟零件環境並選擇任一平面進入草圖模式 (詳Lesson 1),下圖以連續線作說明
Thumbnail
以CATIA V5R20說明軟體介面基本操作
Thumbnail
有鑑於於市場上總是無法將 CPO 技術與光通訊模組之架構、運行方式與發展個別說清,讓非技術背景出身之投資人容易產生混淆,個人則希望透過本篇介紹將讓投資人對於 CPO 技術有一基本認知。下一篇則將針對該族群進行營運與財務數據分析。 (本篇僅開放2小時觀看,之後僅供訂閱會員參考! 歡迎加入訂閱
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
Thumbnail
這一篇要測試一下Video Linear CFG Guidance這個節點,在網路上很多的教學影片跟網友分享的工作流中會看到這個節點,據說這個節點不只可以用在生成影片的工作流中,也可以使用在一般的生成圖片工作流中。
Thumbnail
《撇個》 照夜白電腦繪圖作品 使用軟體:Photoshop
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
開啟零件環境並選擇任一平面進入草圖模式 (詳Lesson 1),下圖以連續線作說明
Thumbnail
以CATIA V5R20說明軟體介面基本操作
Thumbnail
有鑑於於市場上總是無法將 CPO 技術與光通訊模組之架構、運行方式與發展個別說清,讓非技術背景出身之投資人容易產生混淆,個人則希望透過本篇介紹將讓投資人對於 CPO 技術有一基本認知。下一篇則將針對該族群進行營運與財務數據分析。 (本篇僅開放2小時觀看,之後僅供訂閱會員參考! 歡迎加入訂閱
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
Thumbnail
這一篇要測試一下Video Linear CFG Guidance這個節點,在網路上很多的教學影片跟網友分享的工作流中會看到這個節點,據說這個節點不只可以用在生成影片的工作流中,也可以使用在一般的生成圖片工作流中。
Thumbnail
《撇個》 照夜白電腦繪圖作品 使用軟體:Photoshop