s1081414作業1
主題: 圖像旋轉 (Image Rotation)
撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋轉0度至359度):利用一個滑動條(trackbar)控制旋轉角度。開發環境:
- Windows 10
- Visual Studio Code
- python 3.9.7
- OpenCV 4.7.0
說明:
(a)旋轉圖像:
cv2.createTrackbar('rotation', 'yzu', 0, 359, rotateimage)
cv2.setTrackbarPos('rotation', 'yzu', 100)
透過 cv2.createTrackbar 方法,能夠使 OpenCV 產生的指定視窗中加入滑桿,搭配 cv2.setTrackbarPos 方法,可以指定特定滑桿的初始值
M = cv2.getRotationMatrix2D(center, val, 1)
rotated = cv2.warpAffine(img, M, (width, height))
計算旋轉矩陣(val為旋轉的度數、center為圖片中心),並對其進行旋轉
(b)中心內切圓區域
rotated = cv2.warpAffine(img, cv2.getRotationMatrix2D(center, val, 1.0), (width, height))
mask = np.zeros((height, width), dtype=np.uint8)
cv2.circle(mask, center, radius, (255, 255, 255), -1)
mask_inverse = cv2.bitwise_not(mask)
cv2.warpAffine()函數將圖像旋轉到指定的角度。
下面三行程式碼用於創建一個圓形遮罩和其反轉遮罩。在圓形遮罩中心繪製一個白色圓形,以便保留圖像中心的圓形區域。反轉遮罩用於保留圖像中圓形區域之外的部分
masked = cv2.bitwise_and(rotated, rotated, mask=mask)
background = cv2.bitwise_and(img, img, mask=mask_inverse)
sum = cv2.add(background , masked)
這三行程式碼用於將原始圖像中的圓形區域分離出來,以便在圓形區域中應用旋轉操作。選擇在圓形區域中的像素,並在原始圖像中添加旋轉版本的圓形區域,最終生成的圖像將是旋轉後的圓形圖像。
留言
張貼留言