s1101415 Homework #1
1122 Digital Image Processing Assignment #1 報告
學號:s1101415 姓名:張榆莉
主題: 圖像感興趣區域裁切、旋轉與縮放
專案目標:
使用Opencv函式庫及C++撰寫程式,對指定檔名的圖片進行旋轉、放大後,使用滑鼠拖曳來選擇想要裁切的部分圖片,最後輸出裁切後的圖片。
開發環境:Microsoft Windows 10, Visual Studio 2022, OpenCV 4.9.0, C++
程式架構與說明:
1.
使用Console讓使用者輸入想要裁切的檔案名稱(包含附檔名),照片檔案皆會放在”image”資料夾內,讀取失敗時會輸出 ”Can’t find image!” 的訊息。
2. 建立兩個Trackbar,分別控制圖片的旋轉及放大功能。我們可以透過拖曳slide來決定想讓圖片旋轉到什麼角度(上限360度)和放到多大(最多可放大至兩倍)。
圖片的旋轉是使用getRotationMatrix2D來獲取旋轉矩陣,需傳入的參數為:(圖片中心座標, 旋轉角度, 放大比例),再使用warpAffine函式來做變換,需傳入的參數為:(輸入圖片, 輸出圖片, 轉換矩陣, 輸出圖片大小)。
圖片的放大則是使用resize函數來變更圖片的大小。
3. 使用setMouseCallback來偵測滑鼠的動作,onMouse來執行繪製。EVENT_LBUTTONDOWN代表按下滑鼠左鍵,在此時取得接下來要繪製的矩形的起始點左上角。EVENT_LBUTTONUP代表放開滑鼠左鍵,此時先重置圖片並進行旋轉和放大,再繪製矩形。矩形建立時需提供的參數為(左上角x座標, 左上角y座標, 圖片長, 圖片寬)。
4.
當使用者選取好想要的圖片範圍,按下空白鍵即會儲存方框範圍內的圖片。儲存完成後就會結束程式的執行,圖片會以
”crop.jpg” 的檔名存放在專案內。
成果展示與討論:
實作影片連結:https://youtu.be/SS3Dvo4AUCE
執行範例1:不對圖片作任何更動,直接裁切影像。(範例圖片:yzu1.jpg)
執行範例2:將圖片旋轉到想要的角度,再裁切影像。 (範例圖片:yzu2.jpg)
執行範例4:同時對圖片進行放大與旋轉,再裁切影像。(範例圖片:yzu1.jpg)
留言
張貼留言