s1091447 作業1
主題: 圖像旋轉 (Image Rotation)
作業說明 :
撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋
轉 0 度至 359度):利用一個滑動條(trackbar)控制旋轉角度。
轉 0 度至 359度):利用一個滑動條(trackbar)控制旋轉角度。
開發環境:
Windows 11+ Visual Studio 2022 + OpenCV 4.7.0
程式碼說明:
(a)整張圖像
以funcRotate()做處理
:cv2.getTrackbarPos(),讀取滑動條的值cv2.getRotationMatrix2D(),計算旋轉矩陣cv2.warpAffine()函式,進行圖片旋轉
(b)中心內切圓區域
將圖片分為兩個部分,分別為中心內切圓的區域和其他區域,所以使用mask的方式,主要
是以funcRotate_circle()做處理
:使用np.zeros((height, width), np.uint8),創造出黑色背景,且大小和原圖一樣使用cv2.circle(mask, center, radius, (255, 255, 255), -1),在黑色背景畫出白色圓圈使用cv2.bitwise_not(),創造出白色背景黑色圓圈的圖片接著上述兩張圖片分別和原圖使用bitwise_and(),得到下列兩張圖,接著funcRotate_circle()做旋轉的處理做旋轉的處理contours, hierarchy =cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE),取得圓形區域的輪廓。rect = cv2.boundingRect(contours[0]),取得圓形區域的外接矩形,這是要用來計算旋轉中心的位置。center = (rect[0] + rect[2] // 2, rect[1] + rect[3] // 2),使用上面的結果計算旋轉中心的位置然後和funcRotate一樣,使用cv2.getRotationMatrix2D()和cv2.warpAffine()對中心內切圓區域進行旋轉- 最後使用cv2.add(),將旋轉過後的中心內切圓區域和其餘部分做融合得到結果




留言
張貼留言