一、作業題目
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中圍棋個數。
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!
二、執行環境
- python 3.6
- opencv 4.0.21
- PyQt5
- Numpy
- Windows
三、程式功能
基本功能:
可偵測圖中黑棋,並計算其數量,顯示於畫面上。Bonus功能:
呈現出該圖片灰階狀態、二值化狀態、經數學型態運算出的黑棋輪廓,並在偵測到的黑棋上標上數字,呈現黑棋數量的計算。
四、實作方法
使用PyQt建立介面,並將圖片等比例縮放,在介面上以QPixmap形式,做出適當大小的呈現,使用者可透過點擊按鈕,開始黑棋數量的計算。
- 在讀入圖片後,將其轉換為灰階後,以9x9 kernel進行高斯模糊,並利用cv2,threshold將圖片轉為二值化後做INV(因為dilation與erotion主要針對白色區域)。
- 利用dilation、erotion、opening與closing去進行運算調整,以分離出物件。其中,為了消除反光點,我利用dilation去填滿物件,並將kernel調整為1、2、5鋸齒狀的排列,以利物件的分割。同時,我也嘗試以不同的kernel size去做多次的erotion與opening,也利用小size的kernel做closing進行細節填滿與連接,讓輪廓在分割的同時,不至於會侵蝕太多,或是達不到分離效果。
五、執行結果
- 初始畫面。
- 點擊選擇圖片按鈕,選擇想檢測的圖片。
- 所選圖片呈現於主畫面上。
- 點擊calculate按鈕,開始進行偵測運算,並以subplot呈現出灰階圖、二值化圖、數學形態學運算的結果圖、以數字標記出偵測到的棋子,同時也可利用上方工具列,將圖片進行放大或儲存等功能。
- case1:目測24顆,檢測結果24顆。
2. case2:目測31顆,檢測結果30顆。
3. case3:目測31顆,檢測結果31顆。
沒有留言:
張貼留言