s1101416 Homework #7
1122 Digital Image Processing Assignment #7
學號:s1101416 姓名:李柏翰
主題:Image Segmentation and Object Detection 影像分割及物件偵測
專案目標:
撰寫一個程式來偵測出附件2 張視訊照片中的所有書桌的桌面區域。
(1) 標示出每張桌子的桌面的矩形邊界框(Bounding box)
(2) 標示出偵測到桌子的桌角
遇到的問題:
1. 原本想用邊緣檢測的方式判斷是否為書桌,結果成效不彰,能檢測出來的書桌數量甚少。
2. 難判斷桌角在哪,想透過辨別直角的方式標記桌角,但因為照片拍攝角度的關係,有很多桌角以平面圖來看並不是直角。且因為書桌前面有椅子及其餘物品,因此也難以透過四邊形的方式判斷書桌。
3. 容易偵測到不是書桌的部分,只要顏色與書桌相近。且用其他元智圖書館的照片偵測,由於拍攝角度與光線不同,偵測出來的結果誤差更大。
開發平台:
作業系統–Microsoft Windows 11 家用版(23H2)
開發環境–Visual Studio Code
套件–OpenCV 4.20
程式語言–Python 3.10.11
程式架構及說明:
1. 轉換色彩空間
首先,程式載入指定路徑的圖片。將圖片從BGR色彩空間轉換到HSV色彩空間(利用 cv2.cvtColor 函數)。
2. 定義顏色遮罩
透過 cv2.inRange設定書桌的顏色範圍,並建立一個mask,這個mask只包含符合該顏色範圍的部分。
3. 尋找並處理輪廓
利用 cv2.findContours 函數檢測mask中的輪廓。對於每一個找到的輪廓,計算其面積,並過濾出面積大於3000的輪廓。
4. 繪製邊界框與標示桌角
對於過濾後的每個輪廓,使用 cv2.boundingRect 計算能完全包含該輪廓的最小矩形框,並在原始圖片上繪製此矩形框(使用 cv2.rectangle)。此外,對每個桌子的矩形區域進行角點檢測(利用
cv2.goodFeaturesToTrack),並在圖片上標記出來(使用 cv2.circle)。
成果展示與討論:
image1
image2
留言
張貼留言