s1083520 作業1


1112 Digital Image Processing Assignment #1

主題:圖像旋轉 Image Rotation

題目敘述

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

開發環境

OS: Windows 10
Editor: Visual Studio Code
Compiler: GCC - 12.2.0(MinGW-W64)
Language: C++
Package: OpenCV - 4.7.0

前置作業

1. 利用argv[]將圖片路徑作為參數傳入imread(),並宣告cv:Mat型態的變數img儲存原始圖像矩陣

2. cv::namedWindow(const cv::String &winname, int flags = 1) 建立視窗
3. cv::createTrackbar(const cv::String &trackbarname,
                     const cv::String &winname, 
                     int *value, 
                     int count,
                     cv::TrackbarCallback onChang =    
                     (cv::TrackbarCallback)0, void *userdata = (void *)0) 
   綁定傳入的trackbar名稱與給定的視窗名稱
4.撰寫TrackbarCallBack function作為function pointer傳入createTrackbar function的onChange變數

RotateImg演算法

1. cv:Mat.rows(), cv:Mat.cols()得到圖片的高(height)與寬(width),
    將高與寬分別除以2得到圖片中心(center)

2. cv::getTrackbarPos(const cv::String &trackbarname, const cv::String &winname) 
    得到使用者給定的旋轉角度

3. cv::Mat cv::getRotationMatrix2D(cv::Point2f center, double angle, double scale)
    傳入圖片中心、旋轉角度得到一個2x3的旋轉矩陣

4. cv::warpAffine(cv::InputArray src, 
                 cv::OutputArray dst,
                 cv::InputArray M,
                 cv::Size dsize, 
                 int flags = 1, 
                 int borderMode = 0,
                 const cv::Scalar &borderValue = cv::Scalar())
    將圖片進行旋轉

RotateCRImg演算法

1. 與RotateImg演算法大致上相同,但是因為RotateCR只旋轉以圖片中心為圓心的內切圓區域
    因此會使用mask作為整個圖片的遮罩只擷取我們感興趣的部分ROI(Region Of Interest)
    這個圓的半徑會是圖片的高與寬取最小值並除以2得到內切圓的半徑

2. 宣告cv:Mat roi,呼叫cv::Mat::copyTo(cv::OutputArray m, cv::InputArray mask) const
    將原始圖像img矩陣 copy到roi並將mask傳入CopyTo這個function,此時roi則是只有內切圓區域的矩陣。

3. 將roi進行與RotateImg相同步驟操作,得到旋轉過後的內切圓區域矩陣

4. 由於copyTo function會對圖像進行變更,為了之後可能仍然需要使用的原始圖像img,
    呼叫cv::Mat::clone() const,對原始圖像img矩陣進行深拷貝並賦予型態為cv:Mat的變數ret

5. 同樣呼叫cv::Mat::copyTo(cv::OutputArray m, cv::InputArray mask) const
    將roi copy到上面宣告的ret矩陣,要記得一並將mask傳入,否則得到的會是只有roi的圖像

6. 此時ret即為最終結果






實作結果

(一)Original Image



(二)Rotated Image



(三)RotatedCR Image


Demo影片


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1