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得到的是img1被mask掩蓋後的圖,mask中黑色是被遮蓋的地方。
內切圓圖

把旋轉後的圓形貼回原圖片上

使用img1.copyTo(img2,mask),img2是原圖的複製(img.clone()),img1是上一步驟得到的旋轉內切圓,mask是上上步驟使用到的圓形mask。


成果b

 

成果影片展示





留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1