s1081540 作業 2

主題:線條自畫像 (二值化與邊緣偵測 Image

Thresholding and Edge Detection)

作業說明

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a) 利用Sobel Operators 偵測並輸出邊緣成分圖
(b) 設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?)

開發環境

  • Windows 10
  • OpenCV 4.2.0
  • Visual Studio 2019
  • C++

程式實作

  1. 使用 imread(path, IMREAD_GRAYSCALE) 以灰階模式讀入圖像,再使用 empty() 判斷圖片是否存在,若圖像讀取失敗會輸出錯誤訊息並結束程式。
    ▲ Grayscale image

  2. (a) 產生邊緣成分圖
    •  Sobel() :分別計算圖像的x方向、y方向梯度
    •  convertScaleAbs() :分別計算圖像x方向、y方向梯度的絕對值,將圖像轉換回原來的uint8形式(CV_8U),否則將無法顯示圖像,只會顯示灰色的視窗
    •  addWeighted() :因為 Sobel() 是計算兩個方向的梯度,因此要使用此函數將兩個梯度以設定的權重相叠加
    •  imshow() :顯示目標圖像(邊緣成分圖)
  3. (b) 產生類似素描線條的自畫像圖案
    •  addWeighted() :透過255减去原始像素來進行反色操作
      ▲ Reverse color

    •  GaussianBlur() :使用高斯濾波將影像模糊化並消除噪聲
      ▲ Reverse color + Gaussian filter

    • 將圖像疊加並把顏色減淡
    •  imshow() :顯示目標圖像(素描線條圖)
  4.  waitKey(0) :透過使用者輸入0來中止程式

執行結果

(a) 邊緣成分圖

(b) 素描線條圖

▲ 程式執行過程

參考資料:


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1