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 xming:https://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.
透過滑動條給予旋轉角度後,利用
getRotationMatrix2D、warpAffine 計算旋轉後的圖片:
旋轉整張圖像:
旋轉中心內切圓區域:
旋轉預先切割好的內切圓區域後,再填上內切圓外的區域。
參考資料
l 圓形切割:https://blog.csdn.net/xingchenbingbuyu/article/details/50719569
l Trackbar:https://docs.opencv.org/3.4/da/d6a/tutorial_trackbar.html
留言
張貼留言