付費限定

[OpenCV應用][Python]利用findContours找出物件邊界框求出寬度及高度

閱讀時間約 4 分鐘

本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。

一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。

結果圖

從圖中綠色框為物件的邊界框,由邊界框取得寬度與高度

結果圖

結果圖

程式碼

import cv2
import numpy as np

# 讀取圖像
image = cv2.imread('image.png')

# 轉換為灰度圖像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 進行閾值處理或其他圖像預處理操作,以便得到二值圖像
_, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 尋找圖像中的輪廓
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(contours)
# 循環遍歷所有輪廓
for contour in contours:
# 計算包圍輪廓的最小矩形
x, y, w, h = cv2.boundingRect(contour)

# 繪製矩形框
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

# 輸出寬度和高度
print(f"寬度: {w}, 高度: {h}")

# 顯示結果圖像
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

程式碼解說

contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

回傳的是白色像素點的座標,已(X.Y)列表的形式回傳

cv2.findContours 函數用於尋找二值圖像中的輪廓。

threshold 是二值圖像,即將圖像轉換為黑白兩色。

cv2.RETR_EXTERNAL 參數表示只檢測最外層的輪廓。cv2.CHAIN_APPROX_SIMPLE 參數表示只保留輪廓的端點坐標,節省內存。循環遍歷所有輪廓:

回傳的白色像素點的座標

儲存了左上,左下,右上,右下四個點的列表(list)。

找到的輪廓端點

找到的輪廓端點

對應到圖像中的位子

(在OpenCV 圖像中的座標(x,y)表示),但numpy(y,x)所以在做索引切片時要注意

raw-image

numpy是(y,x)

若搞混這兩者的關係,會造成應用上許多的麻煩。

raw-image

補充語法

contours, _ = cv2.findContours(image, mode, method)

contours 回傳的是依白色像素點的座標儲存的列表image : 圖像

mode: 輪廓檢索演算法

cv2.RETR_EXTERNAL:只檢測外層輪廓。

cv2.RETR_LIST:檢測所有輪廓並存在列表。

cv2.RETR_CCOMP:檢測所有輪廓,並組織成兩層層次結構。

cv2.RETR_TREE:檢測所有輪廓,並組織成樹狀結構。

method:輪廓近似演算法

以行動支持創作者!付費即可解鎖
本篇內容共 1674 字、2 則留言,僅發佈於[Python][OpenCV]學習心得筆記你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
avatar-img
128會員
213內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
利用OPENCV,實現SIFT應用,尋找圖片中物件的旋轉角度 本文介紹主要提出SIFT提取關鍵角點的座標,由此算出物件的旋轉角度 程式功能介紹 : 導入待檢測圖及樣本圖,則會依照樣本圖中的物件為基準
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
利用OPENCV,實現SIFT應用,尋找圖片中物件的旋轉角度 本文介紹主要提出SIFT提取關鍵角點的座標,由此算出物件的旋轉角度 程式功能介紹 : 導入待檢測圖及樣本圖,則會依照樣本圖中的物件為基準
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
你可能也想看
Google News 追蹤
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
這是假裝某個空間中的兩端點距離很遠的方式
Thumbnail
高中數學主題練習—求空間中平面
Thumbnail
寬景Wide view 鳥瞰Bird view 前景Foreground 背景Background 正面Front View 側面Side View 俯視Top View 景深Depth of field 微距鏡頭Macro Shot 超特寫Extreme Close up
Thumbnail
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
Thumbnail
點陣圖 點陣圖是由許多方格像素組成的圖片, 因此我們常常在將圖片放大時會呈現像是馬賽克的狀況, 假設期望圖片越清晰那所需要的像素會較多個, 因此空間耗用量也相對較大。 常見的格式有: .JPG .PNG .GIF .BMP .TIFF等格式。 繪製程式碼: 向量圖 向量
Thumbnail
《包圍》 照夜白電腦繪圖作品 使用軟體:Photoshop
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
這是假裝某個空間中的兩端點距離很遠的方式
Thumbnail
高中數學主題練習—求空間中平面
Thumbnail
寬景Wide view 鳥瞰Bird view 前景Foreground 背景Background 正面Front View 側面Side View 俯視Top View 景深Depth of field 微距鏡頭Macro Shot 超特寫Extreme Close up
Thumbnail
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
Thumbnail
點陣圖 點陣圖是由許多方格像素組成的圖片, 因此我們常常在將圖片放大時會呈現像是馬賽克的狀況, 假設期望圖片越清晰那所需要的像素會較多個, 因此空間耗用量也相對較大。 常見的格式有: .JPG .PNG .GIF .BMP .TIFF等格式。 繪製程式碼: 向量圖 向量
Thumbnail
《包圍》 照夜白電腦繪圖作品 使用軟體:Photoshop