1、作業說明
請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!
2、開發環境
- Windows 10
- OpenCv 4.5.5
- Python 3.10.1
3、程式說明
1) 讀取圖像
以imread("[path]")讀取圖像。
2) 進行morphological image processing
先將輸入圖片進行二質化並反向。
以5*5的kernal進行多次erosion直至消除多數雜訊並使棋子分開。
進行dilation使後續更容易找到完整的棋子。
3) 計算棋子數量
由於有些許棋子重疊的關係,完成morphological image processing後並沒有辦法完全分離,於是我將已經完全分離的棋子圖形面積當作參考計算未完全分離的圖形中有多少棋子。
我將已經完全分離的棋子的面積進行平均,這樣就可以得到一個參考值 x,再將未完全分離的圖形跟 x 相除並無條件進位(因為重疊的關係,未完全分離的面積中可能會有n個棋子但面積可能小於n*x)。這樣就能夠計算出接近真實的棋子數量。
最後將morphological影像處理完後的邊框合成到原始圖形中並跟著計算出的棋子數量一起輸出。
4、執行結果
執行程式後會彈出六個視窗分別展示三個img進行完morphological image processing後的結果以及三個img與morphological image processing完成圖的合成圖,並在cmd中展示detect出的結果與實際的棋子數量。
detect結果與實際棋子數量
img1的morphological image processing結果與合成結果
計算結果: 24,真實棋子數: 24
img2的morphological image processing結果與合成結果
計算結果: 30,真實棋子數: 31
img3的morphological image processing結果與合成結果
計算結果: 31,真實棋子數: 31
沒有留言:
張貼留言