2022年3月22日 星期二

s1081408 作業3

 

  • 開發環境:
    1. Windows 10
    2.  OpenCV 4.5.5
    3. Visual Studio 2022
    4. 語言:C++

  • 作業說明:
    • Image Thresholding and Edge Detection: 以灰階模式讀取一張圖像,利用 Sobel operators偵測水平/垂直向邊界後輸出edge map,再利用edge map的邊緣偵測特性,設計出一個類似素描線條的自畫像。

  • 程式功能:
    1. 讀取圖片:輸入圖片路徑後,若路徑存在使用imread()把圖片讀進來,若路徑不存在則提示使用者並結束程式。
    2. 邊緣偵測與合併:用Sobel filter得到xy方向的邊緣圖,利用addWeighted()合併xy方向的圖,得到合併的特徵圖。
      • Sobel()求完導數後可能超出0-255的範圍,因此需要使用16位有號數,Sobel()第二個參數設為CV_16S。 
      • 原圖片為8位無符號數,因此執行完Sobel()後需要透過convertScaleAbs()進行型別轉換。
      • 利用合併出來所得到的圖的邊緣特徵來產生素描圖。
    3. 素描圖
      • 前處理:利用GaussianBlur()減少雜訊和平滑圖像。
      • 圖像黑白反向:255-原圖。
      • 利用Threshold()對圖像進行影像二值化,最後參數為THRESH_TRUNC,此參數設定將大於門檻值的灰階值(較白的部分)設為門檻值,小於門檻值(較黑的部分)的值保持不變,因為較黑的部分為主要輪廓,為素描圖的重點,所以保留原來的值可以使線條有深淺之差。
      • 因為上個步驟會把較白的部分設為門檻值,導致這些部分是灰色的,因此另外將其值改變成255(白)
    4. imshow()顯示操作後結果,waitKey()等待使用者按任意鍵後關閉視窗,使用者可再次輸入圖片,回到步驟1
    • 執行結果:
      • Edge map:
                                

    沒有留言:

    張貼留言