s1093348 作業1
Assignment1 圖像旋轉
功能:將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋
轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。
語言:C++
開發環境: Windows 10 + Visual Studio 2019 + OpenCV 4.5.4
(a)旋轉整張圖像
用拉桿取得角度
createTrackbar(拉桿名稱, 放在哪個視窗, 值, 最大值, 回調函數, 傳給回調函數的值)
會呼叫回調函數,可在函數裡進行旋轉圖片。把值與會用到的圖以全域變數宣告可以減少傳來傳去的麻煩。
![]() |
createTrackbar |
在回調函數中旋轉圖片
先找到選轉中心(圖高、寬的一半),與拉桿取得的值得到一個選轉矩陣。
使用cv::getRotationMatrix2D(選轉中心,角度,縮放)
再使用cv::warpAffine(輸入圖像,輸出圖像,旋轉矩陣,輸出圖像的尺寸,插值方法(默認為線性插值),像素外推法(默認為 BORDER_CONSTANT),border 值(默認為 0))
![]() |
成果a |
(b)只旋轉圖片中心內切圓區域
大致流程:切下內切圓 > 使用拉桿選轉內切圓(與(a)旋轉圖片方法相同) > 把旋轉後的圓形貼回原圖片上
裁切成圓形圖片
用圓形的mask遮罩留下中心內切圓區域:
先找出圓心(圖中心),再找出半徑(圖2邊長較短邊),使用
cv::circle(圖像,圓心坐標,圓形的半徑,線條的顏色,線條的粗細(正數>圓的線條的粗細程度,負數>填充),線條的類型,圓心坐標點和半徑值的小數點位數)
在大小跟原圖一樣的全黑圖上畫出白色圓形來做遮罩
![]() |
遮罩圓 |
![]() |
內切圓圖 |
把旋轉後的圓形貼回原圖片上
使用img1.copyTo(img2,mask),img2是原圖的複製(img.clone()),img1是上一步驟得到的旋轉內切圓,mask是上上步驟使用到的圓形mask。
留言
張貼留言