- 開發環境:
- Windows 10
- OpenCV 4.5.5
- Visual Studio 2022
- 語言:C++
- 作業說明:
- Image Thresholding and Edge Detection: 以灰階模式讀取一張圖像,利用 Sobel operators偵測水平/垂直向邊界後輸出edge map,再利用edge map的邊緣偵測特性,設計出一個類似素描線條的自畫像。
- 程式功能:
- 讀取圖片:輸入圖片路徑後,若路徑存在使用imread()把圖片讀進來,若路徑不存在則提示使用者並結束程式。
- 邊緣偵測與合併:用Sobel filter得到x和y方向的邊緣圖,利用addWeighted()合併x和y方向的圖,得到合併的特徵圖。
Sobel()求完導數後可能超出0-255的範圍
,因此需要使用16位有號數,Sobel()第二個參數設為CV_16S。- 原圖片為8位無符號數,因此執行完Sobel()後需要透過convertScaleAbs()進行型別轉換。
- 利用合併出來所得到的圖的邊緣特徵來產生素描圖。
- 素描圖:
- 前處理:利用GaussianBlur()減少雜訊和平滑圖像。
- 圖像黑白反向:255-原圖。
- 利用Threshold()對圖像進行影像二值化,最後參數為THRESH_TRUNC,此參數設定將大於門檻值的灰階值(較白的部分)設為門檻值,小於門檻值(較黑的部分)的值保持不變,因為較黑的部分為主要輪廓,為素描圖的重點,所以保留原來的值可以使線條有深淺之差。
- 因為上個步驟會把較白的部分設為門檻值,導致這些部分是灰色的,因此另外將其值改變成255(白)。
- imshow()顯示操作後結果,waitKey()等待使用者按任意鍵後關閉視窗,使用者可再次輸入圖片,回到步驟1。
- 執行結果:
- Edge map:
沒有留言:
張貼留言