請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張),每張圖像中圍棋個數。
二、作業環境:
- windows10
- visual studio 2017
- opencv 3.4.1
三、程式架構:
- 用threshold設定圖像二值化的閥值
- 用bitwise_not()進行顏色的反轉
- 用morphologyEx、erode、dilate做腐蝕、膨脹和開運算,調整參數到能最有效的分割圍棋邊界
- 用findContours找出共有幾個輪廓,就可知道圍棋個數
四、成果展示:
![]() |
| 執行結果 |
![]() |
| 第一張圖片邊緣偵測 |
![]() |
| 第二張圖片邊緣偵測 |
![]() |
| 第三張圖片邊緣偵測 |
實際
|
預估
| |
IMG_5702.jpg
|
24
|
22
|
IMG_5703.jpg
|
31
|
30
|
IMG_5704.jpg
|
31
|
32
|
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像共三張,列出每張圖像中圍棋個數。
主要方法是偵測每個物件的輪廓,計算有輪廓形狀的物件數量,根據輪廓內的面積篩掉棋子上的反光的雜訊
imread(image, 0) ,把讀進來的圖轉成灰階圖GaussianBlur(),降低雜訊open = morphologyEx(image, MORPH_OPEN, kernel),用open morphology方法去除周遭的雜訊,這裡我設kernel為(30,30)大小的矩形,可以有效篩掉大多數的棋子上的反光threshold(open, 0, 255, THRESH_BINARY | THRESH_OTSU),這裡用Otsu’s algorithm偵測閾值,所以一開始初始閾值可以隨便給,之後會再修正findContours(sobel, RETR_LIST, CHAIN_APPROX_SIMPLE)找出所有物件輪廓contourArea()篩選掉剩下的棋子反光雜訊,這裡我以area < 10當作篩選條件,最後統計可能是黑子的數量