顯示具有 1102hw2 標籤的文章。 顯示所有文章
顯示具有 1102hw2 標籤的文章。 顯示所有文章

2022年3月10日 星期四

s1082040作業2

一、作業要求

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

二、程式說明

1.createTrackbar把做出拉bar

2.再用for迴圈給值分出圓圈內外圖片

3.warpAffine把圓圈內圖片旋轉(同模式1)

4.bitwise_or合併內外圖片

三、程式環境

Windows 10

Visual Studio 2019

OpenCV 3.4.6

四、執行畫面

整張圖片旋轉

 

中間旋轉


2022年3月7日 星期一

s1073328 作業2

 

    1. 作業說明:


    • 圖像旋轉(Image Rotation)

                    撰寫程式建立一個0~359的Trackbar,選擇旋轉角度,並使讀取的圖片逆時針旋轉。

                    製作出可以選擇(1)整張圖片旋轉或是(2)根據內切圓部分進行旋轉的程式。


    2. 開發環境:


    • Windows 10

    • Visual Studio 2017

    • OpenCV 4.5.5

    3. 程式流程:


    • 首先,輸入圖片完整路徑及名稱,並利用imread()讀取圖片。

                    👉 若是讀取失敗,將跳出提示,並結束程式。

    • 接著,輸入選項,選擇哪種旋轉方式。

                    👉  (1) Whole: 整張圖進行旋轉。

                            (2) Circle: 只旋轉內圈圓部分。

    • 利用createTrackbar()創建一個0~359選項的Trackbar。

    • 根據輸入選項,呼叫不同function,以實現對應旋轉效果。

                   將整張圖片旋轉的函式


                         👉 因為是整張圖片旋轉,因此在此函數中可直接呼叫內建函數實現圖片旋轉。

                         👉 利用Point2f center()取得中心點。

                         👉 利用getRotationMatrix2D()求得旋轉矩陣。

                         👉 利用warpAffine()根據旋轉矩陣,求得旋轉圖片。


                     只旋轉內切圓部分的函式   


                         👉 因為只限定轉內切圓的部分,無法直接利用內建函數實現。
                                因此在此函數中,必須根據旋轉公式,自己撰寫程式達成旋轉。



                         👉 利用for迴圈讀取每個點,並判斷其點是否在內切圓上。
                                是的話,將其點根據上圖公式計算出旋轉後的點。
                                否則,不在內切圓的點不必改變位置。

                         👉 利用點到圓中心點的距離平方是否小於等於半徑平方判斷是否在內切圓上。

                         👉 內切圓半徑是根據判斷圖片長、寬大小計算而得。

    • 最後,利用imshow()將Trackbar及圖片呈現在視窗上。

    • 使用者將可在視窗上藉由Trackbar調整圖片逆時針旋轉角度。



    4. 執行結果:


    • 結果1: 圖片的高大於寬

    原圖(未旋轉)


    整張圖片逆時針旋轉210度

    只旋轉內切圓部分(逆時針轉210度)




實作影片






    • 結果2: 圖片的寬大於高

    原圖(未旋轉)


    整張圖片逆時針旋轉131度


    只旋轉內切圓部分(逆時針轉131度)




      實作影片