2022年3月10日 星期四

s1081535 作業2

 

一、 作業說明 

圖像旋轉 (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迴圈函式旋轉之結果

橫向圖像

直向圖像



將圖像內切圓區域旋轉之結果

橫向圖像

直向圖像




沒有留言:

張貼留言