s1093350 Homework #1
1122 Digital Image Processing Assignment #1報告
學號:s1093350 姓名:楊宜芳
主題:圖像感興趣區域裁切、旋轉與縮放
問題與專案解決目標:
我們在處理影像時,可能會面臨拍攝時不小心歪斜,或者只想保留部分影像等問題。為了解決以上問題,利用
Python 和 OpenCV 撰寫一程式,讓使用者讀取一張圖片,並輸入目標圖片的寬與高。接著,再於視窗上進行圖片的縮放、旋轉以及裁切區域的選擇,並儲存為一張新的圖片。
開發環境:Microsoft
Windows 11, Visual Studio Code 1.87.1, OpenCV 4.90, Python 3.8.13
程式架構與功能說明:
1. 使用者在 Conslole 輸入原始圖片的檔案名稱以及目標圖片的寬與高,範例如下(藍色字體為使用者自行輸入值):
§ input image filename: yzu1.png
§ target image Width: 600
§ target
image Hidth: 400
程式碼及註解如下圖。
2. 讀取圖片,並建立視窗預覽原始圖片。視窗上設置 Trackbar,讓使用者能透過 Trackbar 來調整圖片的縮放比例、旋轉角度、裁切區域位置與儲存檔案。Trackbar 的名稱及功能如下。
§ Zoom:縮放比例(0%-200%)
§ Rotate:旋轉角度(0°-360°)
§ iniX:裁切區域左上點的 x 座標(0-原始圖片寬)
§ iniY:裁切區域左上點的 y 座標(0-原始圖片高)
§ SaveFile:儲存檔案
程式碼及註解如下圖。
因Trackbar改動時不會執行動作,設置nothing函數,不執行任何動作,如下圖。
3. 取得各Trackbar的值,根據取得的值產生圖片的變換矩陣,並利用變換矩陣產生使用者調整過後的圖片。接著,根據使用者設定的裁切區域位置,於調整過後的圖片上繪製裁切區域的範圍,並於另一視窗顯示結果。程式碼及註解如下圖。
4. 使用者若將 SaveFile 的 Trackbar 值設為1,即可將調整過後的影像儲存為新圖片。程式碼及註解如下圖。
5. 在視窗顯示時,按q鍵即可退出程式。而若讀取圖片失敗或用其他方法關閉視窗,會顯示”Please try
again”訊息。程式碼及註解如下圖。
數學運算:
Zoom(縮放比例)的 Trackbar 值設為0%到200%,但在
cv2.getRotationMatrix2D() 中,1為等比例縮放,因此將
zoom 的值除以100。如下圖。
變換矩陣中的參數分別為(變換的中心點, 旋轉角度, 縮放比例)。將中心點設為圖片的中點,因此中心點座標為(圖片的寬/2, 圖片的高/2)。如下圖。
成果展示與討論:
1. 執行範例一:
使用者輸入檔名”yzu1.jpg”、目標寬度600及目標高度400。如下圖。
使用者在 imgWindow 中可看到輸入的圖片,利用Trackbar調整圖片的縮放比例、旋轉角度與裁切位置,並顯示於 newWindow中。如下圖。
使用者將 SaveFile 的 TrackBar 值設為1,即可儲存調整後的圖片,如下圖,得到600*400像素的新圖片。
2. 執行範例二:
使用者輸入檔名”yzu3.jpg”、目標寬度1200及目標高度2400。如下圖。
使用者在 imgWindow 中可看到輸入的圖片,利用 Trackbar 調整圖片的縮放比例、旋轉角度與裁切位置,並顯示於 newWindow中。如下圖。
使用者將 SaveFile 的 TrackBar 值設為1,即可儲存調整後的圖片,如下圖,得到1200*2400像素的新圖片。
成果影片:
影片連結:https://youtu.be/XpKf-DFQfPs
留言
張貼留言