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_BGR2GRAY為RGB轉灰階。
§ cv2.GaussianBlur(img_gray,
(5, 5), 0)
cv2.GaussianBlur() 可使用高斯分佈來進行模糊化。第一個參數為原始圖片,第二個參數為kernel大小(須為正奇數),kernel越大,模糊效果越明顯。第三個參數為標準差,設為0。
§ cv2.Canny(img_blur,
120, 225)
cv2.Canny()可用來做邊緣偵測。第一個參數為原始圖片,第二、三個參數為閾值,範圍可設為0-255。若像素的梯度強度大於高閾值,則該像素會被認為是邊緣;若像素的梯度強度低於低閾值,則該像素不會被視為邊緣;而若梯度強度介於兩閾值之間,該像素只有在連接到一個強邊緣像素時才會被視為邊緣的一部分。
成果展示與討論:
範例一:
使用者在
conslole 輸入檔案名稱,即可使用該圖片生成黑白輪廓線條圖案,並儲存到output資料夾。如下圖。
原始圖片及生成的圖片如下。
範例二:
範例三:
範例四:
使用其他圖片:
影片:
留言
張貼留言