2022年3月8日 星期二

s1081408 作業2


  • 開發環境:
    1. Windows 10
    2.  OpenCV 4.5.5
    3. Visual Studio 2022
    4. 語言:C++

  • 作業說明
    1. Image Rotation: 讀取圖片後,旋轉整張圖像(mode A)圖片中心內切圓區域(mode B)
    2. 旋轉區域的旋轉角度用TrackBar來控制:逆時針旋轉0-359度。 

  • 程式功能:
    1. 讀取圖片:輸入圖片路徑後,若路徑存在使用imread()把圖片讀進來,若路徑不存在則提示使用者並結束程式。
    2. 輸入旋轉模式後,對指定圖片區域進行旋轉
      • createTrackbar()在視窗內創建一個Trackbar,改變bar的值可以改變照片旋轉角度
      • 取得輸入圖片的中心位置,再利用getRotationMatrix2D()根據bar的值以及圖片的中心點,得到旋轉矩陣。
      • 根據不同模式進行不同的旋轉操作
        • A mode: 旋轉整張圖片。
          • 旋轉圖片:warpAffine()將初始輸入圖片根據旋轉矩陣,得出旋轉後的圖片。
        • B mode: 旋轉內切圓區域。
          • 畫圓:用circle()繪製出一個實心圓,黑色部分為0,白色部分是255。
                                                
          • 得到兩張不同區域(圓內和圓外)的圖片:將以上圖片(circle)和初始圖片(img)進行AND操作,這樣能夠把圖片分成內切圓外(~circle&img)和內切圓內(circle&img)的圖像。
                                               
                                               
          • 只旋轉內切圓內的圖片得到內切圓內的圖像後,只對它進行旋轉,用warpAffine()將初始內切圓內圖片根據旋轉矩陣得出旋轉後的內切圓內圖片。
          • 合併兩張圖像接著利用addWeighted()把旋轉的內切圓圖片和內切圓外不做旋轉的圖片疊加在一起。
                3. imshow()顯示操作後結果,waitKey()等待使用者按任意鍵後關閉視窗,使用者可再                                次輸入圖片,回到步驟1。
    • 執行結果:
      • yzu.bmp:
        • mode A: 
        • mode B:

      • bookGray.jpg:
        • mode A:
                                     
        • mode B:
                                     
    • 執行過程影片:




    沒有留言:

    張貼留言