s1091541 作業2

 主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。

開發環境:

  • windows11
  • Opencv 4.7.0
  • Visual Studio 2022 C++

程式碼說明:
(a)利用 Sobel Operators 偵測並輸出邊緣成分圖 :
  1.  取得灰階模式圖像後,首先使用GaussianBlur()函數進行降噪,在這裡我使用的kernal大小為3*3。
                             

  2. 套用Sobel函數,xdir與ydir是用於儲存Sobel濾波器應用後所產生的x與y方向的邊緣檢測結果的陣列,第四與第五個參數各代表x,y方向當x方向的參數為1則生成xdir反之亦如此。最後一個參數代表Sobel的kernal大小。

  3. 套用convertScaleAbs()函數,因為上一個步驟的結果有可能為負數,所以需要此函數除去符號以方便後續處理。
  4. 使用addWeighted()將xdir與ydir合併形成一張圖,再透過bitwise_not()將黑白反轉即可得到圖(一)。
                                                                                                                                                                     圖(一)                                 

(b)設計一個類似素描線條的自畫像圖案:
    為了讓圖片更接近素描圖像,我把一些顏色較深的線條調淡。
  1. 使用threshold()將圖(一)中顏色較深的地方分隔出來如圖(二)。                                                                                                                                                                                                                                       圖(二)                                                       圖(三)

              
  2. 接著對圖(二)使用dilate()將其膨脹成圖(三)。
  3. 最後將圖(一)與膨脹完的圖(三)使用addWeighted()合併成圖(四)。
                                                                                                                                                   圖(四)
成果:

(a)                                                        (b)
    

留言

這個網誌中的熱門文章

rzwang Homework #1

s1101438 Homework #1

s1093309 作業6