s1093304 作業1

一、作業說明

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

圖一、圖片輸入

二、開發環境

  • Windows 10
  • Visual Studio Code 1.76.1
  • Python 3.9.15
  • OpenCV 4.6.0

三、實作過程

  • 首先輸入選擇,輸入1為旋轉整張圖片;輸入2則旋轉內切圓圖片
  • 接著如下圖二所示:
    • cv2.imread():用於讀取圖片
    • cv2.namedWindow():建立窗口
    • cv2.createTrackbar():建立滑動條。當滑動條位置改變時,則觸發move_trackbar函式
    • cv2.imshow():顯示圖片
    • cv2.waitKey():等待鍵盤輸入
    • cv2.destroyAllWindows():按下任意鍵後執行此函式以關閉所有視窗
圖二、視窗及相關功能的建立與關閉
  • move_trackbar函式處理圖片旋轉:
    • 旋轉整張圖片:
      • 使用img.shape[:2]取得圖片的高與寬。
      • cv2.getRotationMatrix2D():獲得旋轉矩陣。
      • cv2.warpAffine():對圖像進行仿射變換。根據旋轉矩陣,對於原始圖像中的每個像素進行變換,最後將如下圖三得到旋轉後的圖像。
        圖三、最終旋轉後的圖像(稱為rotated_pic)
    • 旋轉內切圓圖片:
      • 若一開始輸入選擇為2,則在「旋轉整張圖片」步驟後,接續利用圖片的高與寬計算圓心與半徑。
      • 使用np.zeros()根據圖片尺寸建立遮罩。
      • 如下圖四,透過cv2.circle()在mask上畫白色圓形 。
        圖四、在遮罩上畫白色圓形
      • 如下圖五,使用cv2.bitwise_and()將旋轉後的圖印在有白色圓的遮罩上。 
        圖五、旋轉後的圖印在白色圓形上 (稱為circle_pic)
      • 如下圖六,使用cv2.bitwise_not()對遮罩進行反轉,以建立白色背景。
        圖六、反轉遮罩
      • 如下圖七、再使用cv2.bitwise_and()將原圖印在白色背景上。
        圖七、原圖印在白色背景上 (稱為back_img)
      • 如下圖八,圖五的circle_pic和圖七的back_img透過cv2.bitwise_or()形成最終旋轉後的圖像。
        圖八、最終旋轉後的圖像(稱為rotated_pic)
  • 最後透過cv2.imshow()呈現圖片旋轉後的結果(rotated_pic),以下為影片Demo:

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1