s1072026 作業1

作業說明

主題:圖像旋轉 (Image Rotation)

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

開發環境

l   Ubuntu 20.04.5 LTS

l   Visual Studio Code

l   OpenCV 3.4.16

l   C++

程式功能

1.        輸入圖片路徑,讀取失敗會輸出錯誤訊息

2.        分別開啟旋轉整張圖像與中心內切圓區域的視窗

3.        依照滑動條給予的角度旋轉整張圖像

4.        依照滑動條給予的角度旋轉中心內切圓區域

環境設定

執行前需安裝以下套件

l   cmake

l   OpenCV 3.4.16

l   libgtk2.0-dev

l   pkg-config

l   xminghttps://sourceforge.net/projects/xming/

n   執行程式時需開啟

l   x11-xserver-utils

如果在 terminal 執行 xhost + 顯示 xhost: unable to open display "",需要設定 export DISPLAY=:0.0,之後執行程式就能顯示視窗。

執行方式

執行 cmake . 產生 makefile,該 makefile 用於編譯主程式時動態連結 OpenCV 函式庫與主程式,之後便可執行編譯好的程式。


實作方式與執行結果

1.        讀取圖片路徑,並用 imread 讀取圖片,儲存並計算如下圖中的參數

2.        開啟兩個顯示視窗,功能分別為旋轉整張圖像與中心內切圓區域

3.        以圖片較短邊的一半作為內切圓半徑與圖片中心點作為圓心,預先切割並儲存內切圓內部與外部區域

切割方式:
利用畢氏定理計算讀取的像素位置與內切圓圓心位置之間的距離。如果距離大於半徑,代表該像素位於圓外;反之,如果距離小於等於半徑,代表該像素位於圓邊或圓內。

4.        透過滑動條給予旋轉角度後,利用 getRotationMatrix2DwarpAffine 計算旋轉後的圖片:
旋轉整張圖像:



旋轉中心內切圓區域:

旋轉預先切割好的內切圓區域後,再填上內切圓外的區域。

參考資料

l   圓形切割:https://blog.csdn.net/xingchenbingbuyu/article/details/50719569

l   Trackbarhttps://docs.opencv.org/3.4/da/d6a/tutorial_trackbar.html

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7