2022年3月10日 星期四

1081523 作業2

 s1081523 作業2

作業說明:

主題: 圖像旋轉 (Image Rotation) 撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。

 

開發環境: 

·     Windows 10

·     Visual Studio 2019

·     OpenCV 4.5.5

·     C++


 實作過程:

1.先利用imread()讀取圖片,並讓使用者輸入旋轉模式(1.全圖片旋轉,2.最大內切圓旋轉)。

2.建立trackbar,並填入全域變數(欲旋轉的角度),並呼叫旋轉函數。

3.若是旋轉全圖片,則先用Point()找出中心點為圖片長度及寬度的一半,並且用getRotationMatrix2D來旋轉想要的角度並用warpAffine將原圖片旋轉後輸出到目標矩陣中。若是旋轉內切圓則一樣找出中心點後,要另外做判定最大內切圓半徑為min(圖片的長度, 圖片的寬度)然後利用高中數學中圓的方程式 (x - x1) ^ 2 + (y - y1) ^ 2 < radius ^ 2 即為圓內,(x1, y1)則是圖片中心點, (x - x1) ^ 2 + (y - y1) ^ 2 > radius ^ 2的點就是圓外。用for迴圈逐點檢查是否在圓內,並將園內的點畫出存在矩陣img1,圓外的點畫出存在img2後呼叫旋轉圖片函數如上,只針對img1旋轉,最後用addWieghted函數將兩矩陣組合輸出到目標視窗。

4.應正常顯示輸出視窗,上有trackbar可以控制旋轉的角度,角度是範圍為0-359之間的整數。

5. 結束程式,關閉圖片顯示視窗。


執行結果:

全圖片旋轉: 逆時針45度


全圖片旋轉: 逆時針235度

內切圓旋轉: 逆時針235度

內切圓旋轉: 逆時針235度



備註(圖片有點大,下方有點切到)








沒有留言:

張貼留言