s1093350 Homework #2

1122 Digital Image Processing Assignment #2報告


學號:s1093350      姓名:楊宜芳 

主題:邊緣偵測與圖像二值化

問題與專案解決目標: 

撰寫一個程式,將彩色照片快速生成黑白輪廓線條圖案。

開發環境:Microsoft Windows 11, Visual Studio Code 1.87.1, OpenCV 4.90, Python 3.8.13

程式架構與功能說明: 

1. 讓使用者 Conslole 輸入原始圖片的檔案名稱(包含副檔名),並讀取圖片。範例如下,藍色部分為使用者自行輸入:

§   input image filename: yzu1.jpg

程式碼及註解如下圖。


2. 使用 cv2.cvtColor() 函式將圖片從彩色轉為灰階,接著用 cv2.GaussianBlur() 函式對圖片做高斯模糊,再使用 cv2.Canny() 函式對圖片做邊緣偵測,最後將處理好的圖片儲存到 output 資料夾。若讀取圖片失敗,則印出「 Please try again. 」。程式碼及註解如下圖。


使用函式說明: 

§   cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.cvtColor() 可用來轉換影像的色彩。第一個參數為原始圖片,第二個參數為要轉換的色彩空間。cv2.COLOR_BGR2GRAYRGB轉灰階。

§   cv2.GaussianBlur(img_gray, (5, 5), 0)

cv2.GaussianBlur() 可使用高斯分佈來進行模糊化。第一個參數為原始圖片,第二個參數為kernel大小(須為正奇數),kernel越大,模糊效果越明顯。第三個參數為標準差,設為0

§   cv2.Canny(img_blur, 120, 225)

cv2.Canny()可用來做邊緣偵測。第一個參數為原始圖片,第二、三個參數為閾值,範圍可設為0255。若像素的梯度強度大於高閾值,則該像素會被認為是邊緣;若像素的梯度強度低於低閾值,則該像素不會被視為邊緣;而若梯度強度介於兩閾值之間,該像素只有在連接到一個強邊緣像素時才會被視為邊緣的一部分。

成果展示與討論:

範例一:

使用者conslole 輸入檔案名稱,即可使用該圖片生成黑白輪廓線條圖案,並儲存到output資料夾。如下圖。


原始圖片及生成的圖片如下。


範例二:


範例三:


範例四:


使用其他圖片:


影片:



留言

這個網誌中的熱門文章

rzwang Homework #1

s1091537 Homework #1