1、作業說明
撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。
2、開發環境
- Windows 10
- OpenCv 4.5.5
- Python 3.10.1
3、程式說明
1) Track Bar
使用opencv的createTrackbar方法創建track bar,並使用回撥函式去得知當前track bar位置對應的數值並利用該數值進行後續操作。
2) 整張圖片旋轉
本程式中使用opencv中getRotationMatrix2D方法得知旋轉角度的旋轉矩陣,並使用warpAffine針對該旋轉矩陣對圖片進行旋轉。
3) 圖片內接圓旋轉
本程式先將原圖拆分為兩張圖像,一張只有內接圓內有圖像,其他地方全黑;另一張則相反,只有內接圓以外的部分有圖像,如下圖。
- 原圖拆分方法
使用numpy先建立彩色圖像並複製原圖(以下稱圖A),再建立全黑的單通道(黑白)圖像使用並opencv的circle方法繪製一個白色的內切圓(以下稱圖B),再用迴圈判斷圖B每一個像素是否為黑色,為黑色的話則使圖A的該像素轉變為黑色(B = G = R = 0)。即可得到僅有內接圓內有圖像的圖像了(上圖左)。若要做出只有非內接圓內有圖像的話就將圖B的黑白完全反過來就好了(或是直接判斷圖B是否為白色)。
得到兩張圖後只使內接圓那張圖片(上圖左)進行旋轉,再使用bitwise_or將旋轉的內接圓與為旋轉的圖像重和即可得到只有內接圓在旋轉的效果。
4、執行結果
執行程式後會彈出兩個視窗如下圖分別為Rotated image,旋轉整張圖片與Rotated CR image,旋轉圖片內切圓區域。視窗中圖片會隨著track bar的移動改變圖片旋轉的角度。
根據track bar使圖片內切圓逆時針旋轉
沒有留言:
張貼留言