s1091438 作業1

 

主題 圖像旋轉 (Image Rotation)

一、題目說明 

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

二、開發環境

            OS : Windows 11
            Editor : Visual Studio Code
            Language : Python
            Package : OpenCV - 4.7.0

三、程式碼說明

           (1) Trackbar


                cv2.createTrackbar() :  創造Trackbar,並設定Trackbar的範圍(0~359)
                cv2.setTrackbarPos() : 設定Trackbar的初始值

                透過47~51行,分別為 (a) 整張圖像 (b) 中心內切圓區域旋轉的視窗各創立一個Trackbar,
                並透過get_trackbar_val()和getpart_trackbar_val()獲取各視窗的Trackbar值,並將此值分別
                傳入rotate_full()和rotate_part()中,用來控制圖片旋轉的度數

           (2) 旋轉整張圖片


                cv2.getRotationMatrix2D() :  獲得旋轉矩陣M,val為旋轉的度數,center為旋轉中心
                cv2.warpAffine() : 對圖片進行旋轉

           (3) 旋轉中心圓

                <1> 

                透過 np.zeros(),創造出大小和原圖一樣的黑色背景(img_new)使用cv2.circle(),

                背景上畫出白色圓圈(circle_mask,附圖一),並透過bitwise_not(),創造出白色背景黑色圈

                圈的background_mask(附圖二)

附圖一(黑色背景、白色圈圈)

附圖二(白色背景、黑色圈圈)

                <2> 將原圖與mask進行bitwise_and(),就可以擷取所需要的圖形(位置在mask的白色區域) ,如附圖三、附圖四 

附圖三(將原圖與附圖一進行bitwise_and())
附圖四(將原圖與附圖二進行bitwise_and())

<3> 最後將附圖三、四合再一起(bitwise_or())、並只旋轉附圖三部分即完成

四、參考資料

            (1) https://steam.oxxostudio.tw/category/python/ai/opencv-warp-affine.html
            (2) https://ithelp.ithome.com.tw/articles/10236235
            (3) https://ithelp.ithome.com.tw/articles/10246291

五、實作影片

            





        

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6