s1093306 作業1

 一.作業說明

          撰寫一個程式將一張圖像的

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

   二.開發環境

  • 作業系統:    Windows10
  • 編譯器:     Visual Studio 2019
  • 程式語言:    C++
  • OpenCV版本:   4.7.0 
    三.程式說明
    分成三個部分,分別1.實作旋轉整張圖片、2.旋轉中心圓以及3.主程式選擇旋轉圖片模式。
    
       0.先將參數和圖片讀取(imread())先設定好等等會用:
    //mode 切換模式用

  1. 旋轉整張圖片(Rotate_img):
       使用getRotationMatrix2D(圖中心點,角度,圖片比例大小)來建立旋轉矩陣,然後圖片在旋轉過後會有地方被裁掉=>用warpAffine()函式處理warpAffine(輸入圖,輸出圖,第三個參數為變化後的圖片大小)
//warpAffine參考網站: https://docs.opencv.org/3.4/d4/d61/tutorial_warp_affine.html

                                                                        輸出圖


     2.旋轉中心圓(Rotate_circleheart_img):
建立一個 img_mask矩陣並用zeros將項數值都歸0(全黑)等等用來處理中心圓的像素
,如圖1
圖1

使用opcv circle圓型的函式, circle(選擇的圖,中心點,半徑,顏色(顏色沒差之後會覆蓋掉),這裡設為-1,表示這是一個實點),如圖2
//圓型的函式參考網站:https://www.cnblogs.com/skyfsm/p/6897313.html
圖2

用copyTo()函示不花記憶體空間 將圖像(img)複製到圖(img_mask)大小上,如圖3
//參考網頁: https://openweather.blogspot.com/2019/09/opencv-clonecopyto-opencvclonecopyto.html
img.copyTo(img_rotated_mask, img_mask); 
圖3

然後跟1.一樣計算一個旋轉矩陣getRotationMatrix2D(img_center, angle, 1.0);
用warpAffine()函式處理img_rotated_mask得到旋轉後的圖,如圖4
圖4

用copyTo()函示將圖像(img_rotated_mask)複製到圖(img_mask)大小上,如圖5
圖5
                    3.主程式:用mode調整輸出成品
namedWindow建立視窗然後用createTrackbar為(a)、(b)兩題建立旋轉角度的滑條,另外幫(b)建立可以調整半徑的滑條
//createTrackbar參考https://steam.oxxostudio.tw/category/python/ai/opencv-trackbar.html


        四.實作影片
        (a):旋轉整張圖片
        (b):旋轉中心圓
              https://youtu.be/3tNfujVWlSA

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7