s1091707 作業1

 作業說明:

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

執行環境:

  • windows10
  • Opencv 4.6.0
  • Python 3.10.2
  • Vscode
實作方法:
  • (A)旋轉整張圖像:
    1. 首先,用imread,imsow函式讀入圖片及顯示圖片,以及使用shape取得本相片width,height, channel,前兩項值將用來計算中心點並存在list資料結構中留待之後使用。


    2. 再來,用createTrackbar函式分別給予5種參數,'滑桿名稱', '視窗名稱',trackbar最小值,trackbar最大值,要執行的function;再用setTrackbarPos函式分別給予3種參數,'滑桿名稱', '視窗名稱', '滑桿預設值'。


    3. 最後,定義一個rotation function被上述createTrackbar函式呼叫,parameter為要旋轉的度數。在此function中將使用getRotationMatrix2D函式分別給予3個參數,'中心點', '旋轉值', '參數縮放比例',並回傳一個2*3的transformation matrix,
      再將此matrix傳進warpAffine函式進行如旋轉、仿射、平移等變換,分別給予前3種參數,'圖片名稱','transformation matrix', '輸出圖片的寬跟高'。
  • (B)旋轉中心圓內切區域:
     
    1. 首先,用imread讀入圖檔,及使用copy函數複製一張原圖留待之後合成使用,和計算本張圖片的中心點,並比較width, height兩者何者比較小,以它作為內切圓的半徑。

    2. 再來,製作mask取出圓半徑,先用numpy內建函式zeros產生height及width相同值為0的陣列,再畫出相同內切圓大小且顏色為白色外部為黑色,因為圓的部分待會要做bitwise_and白色的部分會保留圖案,黑色的部分and後會為0就不保留。
    3. 再執行如同(A)的第二跟第三步驟做旋轉。
    4. 最後把第一步先複製好的圖片中間挖一個大小相同的內切圓,跟步驟3的成品做add_weighted合成,因此被挖掉的部分會合成再一起,其他則保留原圖。

執行結果:
旋轉前:


旋轉後:

demo影片:






留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1