2022年2月28日 星期一

s1083336 作業2

 作業說明:

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


開發環境:

  •     Windows10
  •     VSCode
  •     python 3.10.2
  •     OpenCV 4.5.5


執行:

    執行Assignment2.py後輸入讀取圖片的路徑(記得要加副檔名)


執行結果:

    


程式碼:

    mask = np.ones(img.shape[:2], dtype="uint8")
    cv2.circle(mask, center, radius, 0, -1)
    outSide = cv2.bitwise_and(img, img, mask=mask)

    先將mask設定為與讀入圖片大小一樣的陣列並將參數全部設為1,用cv2.circle()將中間不要的部分設為0,最後使用bitwise_and()得到外面的部分,因為外部的部分不會動所以不用更新
    示意圖:
    


    mask = np.zeros(img.shape[:2], dtype="uint8")
    cv2.circle(mask, center, radius, 1, -1)

    再來我們用一樣的方法做內部圓圈的mask,0和1的部分反過來

    rotation = cv2.getRotationMatrix2D(center, angle, 1)
    rotatedImg = cv2.warpAffine(img, rotation, ((int)(row), (int)(col)))
    rotatedImg[mask == 0] = 0
    接下來我們在trackbar的callback function做出旋轉過後的圖片,並依照mask才出中間的圓圈

示意圖:

result = cv2.bitwise_or(outSide, rotatedImg)
最後用bitwise_or()將兩張圖片接在一起就完成了

沒有留言:

張貼留言