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():對圖像進行仿射變換。根據旋轉矩陣,對於原始圖像中的每個像素進行變換,最後將如下圖三得到旋轉後的圖像。
- 旋轉內切圓圖片:
- 若一開始輸入選擇為2,則在「旋轉整張圖片」步驟後,接續利用圖片的高與寬計算圓心與半徑。
- 使用np.zeros()根據圖片尺寸建立遮罩。
- 如下圖四,透過cv2.circle()在mask上畫白色圓形 。
- 如下圖五,使用cv2.bitwise_and()將旋轉後的圖印在有白色圓的遮罩上。 圖五、旋轉後的圖印在白色圓形上 (稱為circle_pic)
- 如下圖六,使用cv2.bitwise_not()對遮罩進行反轉,以建立白色背景。
- 如下圖七、再使用cv2.bitwise_and()將原圖印在白色背景上。
- 如下圖八,圖五的circle_pic和圖七的back_img透過cv2.bitwise_or()形成最終旋轉後的圖像。
- 最後透過cv2.imshow()呈現圖片旋轉後的結果(rotated_pic),以下為影片Demo:
留言
張貼留言