s1091447 作業1

 

主題: 圖像旋轉 (Image Rotation)

作業說明 :

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

開發環境: 

   Windows 11+ Visual Studio 2022 + OpenCV 4.7.0

程式碼說明:

    (a)整張圖像

        funcRotate()做處理:
  1. cv2.getTrackbarPos(),讀取滑動條的值
  2. cv2.getRotationMatrix2D(),計算旋轉矩陣
  3. cv2.warpAffine() 函式,進行圖片旋轉

    (b)中心內切圓區域

        將圖片分為兩個部分,分別為中心內切圓的區域和其他區域,所以使用mask的方式,主要
        是以funcRotate_circle()做處理:
  1. 使用np.zeros((height, width), np.uint8),創造出黑色背景,且大小和原圖一樣
  2. 使用cv2.circle(mask, center, radius, (255, 255, 255), -1),在黑色背景畫出白色圓圈


  3.  使用cv2.bitwise_not(),創造出白色背景黑色圓圈的圖片

  4. 接著上述兩張圖片分別和原圖使用bitwise_and(),得到下列兩張圖,接著funcRotate_circle()做旋轉的處理做旋轉的處


  5.  contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE),取得圓形區域的輪廓。
  6. rect = cv2.boundingRect(contours[0]),取得圓形區域的外接矩形,這是要用來計算旋轉中心的位置。
  7. center = (rect[0] + rect[2] // 2, rect[1] + rect[3] // 2),使用上面的結果計算旋轉中心的位置
  8. 然後和funcRotate一樣,使用cv2.getRotationMatrix2D()和cv2.warpAffine()中心內切圓區域進行旋轉
  9. 最後使用cv2.add(),將旋轉過後的中心內切圓區域和其餘部分做融合得到結果

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6