作業說明:
請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。
使用環境/語言:
- Windows10
- Visual Studio 2019
- Opencv-4.3.0
- C++
實作方法:
- 輸入圖片路徑後,會檢查是否可讀取到圖片內容,若不行,則重新輸入圖片路徑。
- 由於 erode及dilate,只能用於經過二值化運算的灰階圖片。因此先將圖片轉成灰階圖,並利用threshold對圖片進行二值化運算。
- 將經過二值化運算的灰階圖片代入erode,如此能讓圖片去噪、細化影像和消除毛刺。
- 由於 erode 會讓圖片的輪廓變細,因此需要利用 dilate 讓圖片的輪廓恢復正常大小,圖片會較清晰。
- 利用 HoughCircles,偵測圖中的圓形個數,圓形個數即為圍棋個數。
- 根據圓形的圓心座標及圓半徑畫圓,利用circle函式畫圓。
- 使用迴圈,將偵測到的所有圓形畫在圖片上。
- 印完圖片後,回到第一點的流程。
- 第一點的流程輸入0,則終止程式。
執行方式/畫面:
IMG_5702.JPG:(原圖:24顆圍棋,偵測:23顆圍棋)
IMG_5703.JPG:(原圖:31顆圍棋,偵測:30顆圍棋)
IMG_5704.JPG:(原圖:31顆圍棋,偵測:31顆圍棋)
參考資料:
- https://shengyu7697.github.io/python-opencv-erode-dilate/
- https://ithelp.ithome.com.tw/articles/10246270
- https://blog.csdn.net/u012566751/article/details/77046445
- https://docs.opencv.org/4.x/d3/de5/tutorial_js_houghcircles.html
- https://blog.csdn.net/zangle260/article/details/52980876
沒有留言:
張貼留言