一、 作業說明
圖像旋轉 (Image Rotation)
撰寫一個程式,利用內建函式和自訂函式將一張圖像的整張圖像,以及自訂一函式將圖像中心內切圓區域,根據滑動條(trackbar)指定旋轉角度旋轉特定角度(逆時針旋轉 0 度至 359 度)。
二、 作業環境
- MacOS Monterey 12.2
- PyCharm 2019.3.3
- Python 3.8
- OpenCV 4.5.5
三、 實作功能與方法
建立Trackbar取得旋轉角度
- 使用cv2.creatTrackbar('滑動條名稱', '顯示視窗名稱', 起始值(0), 最大值(359), 執行function),建立Trackbar,並設定其被滑動時應執行的函式。
- 對應函式中,利用cv2.getTrackbarPos('滑動條名稱', '顯示視窗名稱')取得使用者指定之旋轉角度,供旋轉之用。
內建函式旋轉圖像
- 透過cv2.getRotationMatrix2D(旋轉中心點, 旋轉角度, 旋轉後縮放大小)取得旋轉矩陣。
- 根據旋轉矩陣對原始圖像進行仿射變換,達到旋轉效果。
自訂函式旋轉圖像
- 利用雙重for迴圈,將原始位置之像素值複製至旋轉後對應空陣列的位置,達成撰寫自訂函式旋轉圖像之功能。
- 以順時針而言,旋轉後像素位置之值隨"x'=x*cos(θ)+y*sin(θ)"以及"y'=-x*sin(θ)+y*cos(θ)"變動,若須逆時針轉動,將θ之值以0-θ取代之即可。
旋轉圖像內切圓區域
- 延伸使用自訂函式旋轉圖像之功能,設置if判斷句檢視是否為內切圓範圍。是則取得旋轉後之像素值,反之則維持原始之值。
- 使用畢氏定理(a2+b2 = c2)為內切圓範圍判定方法,設像素點距圖像中心點之水平距離和垂直距離為a與b,計算後所得若c值小於圖像"短邊/2"之值則為內切圓範圍,亦即須旋轉範圍。
四、 執行結果
利用內建函式旋轉之結果
橫向圖像
直向圖像
利用自訂雙重For迴圈函式旋轉之結果
橫向圖像
直向圖像
將圖像內切圓區域旋轉之結果
橫向圖像
直向圖像
沒有留言:
張貼留言