2022年2月28日 星期一

s1081541 作業2

 

作業說明:

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

開發環境: 

Windows 10 + Visual Studio 2019 + OpenCV 4.5.0 + C++


實作方法:

1. 輸入圖片路徑,讀取圖片

2. 新增2trackbar到不同function

3. function1:獲取trackbar1的角度,設置旋轉中心和矩陣, 圖像旋轉至新的圖片,顯示旋轉後圖片(New1)

4. function2:獲取trackbar2的角度,設置旋轉中心和矩陣, 圖像旋轉至新的圖片(dst2), 設置圖片中心點,判斷每點元素若距離中心點大於半徑(原圖高或寬最小值除二),則為原圖片點元素,否則為旋轉後圖片點元素,判斷完後顯示圖片(New2)

執行結果:

A.半徑:寬除2





B.半徑:高除2





s1083336 作業2

 作業說明:

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


開發環境:

  •     Windows10
  •     VSCode
  •     python 3.10.2
  •     OpenCV 4.5.5


執行:

    執行Assignment2.py後輸入讀取圖片的路徑(記得要加副檔名)


執行結果:

    


程式碼:

    mask = np.ones(img.shape[:2], dtype="uint8")
    cv2.circle(mask, center, radius, 0, -1)
    outSide = cv2.bitwise_and(img, img, mask=mask)

    先將mask設定為與讀入圖片大小一樣的陣列並將參數全部設為1,用cv2.circle()將中間不要的部分設為0,最後使用bitwise_and()得到外面的部分,因為外部的部分不會動所以不用更新
    示意圖:
    


    mask = np.zeros(img.shape[:2], dtype="uint8")
    cv2.circle(mask, center, radius, 1, -1)

    再來我們用一樣的方法做內部圓圈的mask,0和1的部分反過來

    rotation = cv2.getRotationMatrix2D(center, angle, 1)
    rotatedImg = cv2.warpAffine(img, rotation, ((int)(row), (int)(col)))
    rotatedImg[mask == 0] = 0
    接下來我們在trackbar的callback function做出旋轉過後的圖片,並依照mask才出中間的圓圈

示意圖:

result = cv2.bitwise_or(outSide, rotatedImg)
最後用bitwise_or()將兩張圖片接在一起就完成了

s1081544 作業2

 開發環境:

        Windows10

        Visual studio 2022

        Opencv-4.5.0

        C++

作業說明:

        用trackbar滑動控制圖片的旋轉角度,選擇旋轉

整張圖或是中心內切圓區域,旋轉角度0到359度。

實作方法:

        先輸入a或b選擇要旋轉整張圖還是內切圓區域,

如果是a就直接create一個trackbar,初始值是0最多拉

到359,b的話則把原圖切割成兩個部分,然後旋轉內

切圓的部分,trackbar控制旋轉角度後再線性混合兩個

部分。

執行結果:  

    模式a

    原圖:

    整張圖逆時鐘旋轉:

    模式b
    原圖:
    內切圓區域逆時鐘旋轉:

2022年2月26日 星期六

s1081542 作業2

 

作業說明:

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

使用環境/語言:

  • Windows10
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

實作方法:

  1. 輸入圖片路徑後,會檢查是否可讀取到圖片內容,若不行,則重新輸入圖片路徑。
  2. 輸入欲旋轉的角度。
  3. 會輸出三種圖:原圖、整張圖像旋轉的圖、中心內切圓區域旋轉的圖
  4. 整張圖像旋轉的圖: 利用 getRotationMatrix2D 求出旋轉矩陣 , 再利用 warpAffine 將圖片旋轉
  5. 中心內切圓區域旋轉的圖: 利用每個點座標與圓心之間的距離,判斷是否屬於圓。將所有屬於圓的點座標做成一張圖(a)不屬於圓的點座標做成另外一張圖(b)。 然後圓形圖會根據輸入的角度作旋轉(c)。旋轉完後,再將(b)圖與(c)圖合併
  6. 印完圖像後,可讓使用者選擇是否要繼續輸入旋轉角度,觀察同張圖片不同旋轉角度的效果,若輸入^z,則回到第二點的流程
  7. 第一點的流程輸入0,則終止程式。

執行方式/畫面:

  • 原圖: image
  • 整張圖像旋轉的圖: image
  • 中心內切圓區域旋轉的圖: image

影片:



參考資料:

s1081506 作業2

作業說明:

          輸入一張圖像

圖像的中心內切圓區域,旋轉一個角度(逆時針旋 0 度至 359 )

利用一個滑動條(trackbar)控制旋轉角度

 

使用環境/語言:

        Windows11

        Visual Studio 2019

        Opencv-4.1.0

        C++

 

實作方法(執行步驟):

        1. 輸入圖片路徑後imread()讀入圖片

        2. Mat.empty()判斷圖片是否存在

        3. 若圖片不存在或發生例外時輸出錯誤訊息並結束程式

        4. 判斷每個點離圖像中心的距離 找到原圖的最大內切圓範圍

        5. 將內切圓內外分別映射到另外兩個圖中

        6. 調整trackbar 將只有內切圓的圖旋轉 映射到只有外圍的圖的中心

        7. 顯示出兩張圖疊合後的樣子

 

實作結果:

                                        輸入0 :

                                    輸入142 :



 

參考資料:

https://blog.csdn.net/xingchenbingbuyu/article/details/50719569

https://docs.opencv.org/3.4/da/d6a/tutorial_trackbar.html

s1073331 作業2

 

一、 作業說明

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

二、 作業環境

Windows 10OpenCV 4.5.5Visual Studio 2017

三、  實作方法、執行結果

1.input的圖片放入專案資料夾內,編譯程式後,輸入圖片名稱,如:XXXX.jpg。如檔案位置錯誤或名稱錯誤會跳出訊息,並且結束程式。

2.成功之後會跳出圖片,上方會有滑動條,可以調整角度,預設為零度,可以從0~360度,並及時出現在畫面中。

程式實作原理:

  (1)首先,要先針對原圖進行分割處理,切出一個內切圓的圖、還有一個外框。

  (2)分割的原理,先創兩個空白Mat物件,然後在原始圖片上切出一個圓圈,程式尋訪每個點,然後判斷該點是不是在圈內,如果是就將該點的資料複製到其中一張圖上,反之依然,圈外就複製到另外一張圖上,最後切出來的結果如下所示。





  (3)我們再將只有圓的圖,利用getRotationMatrix2D()、warpAffine()進行旋轉的動作。



  (4)最後,再利用分割的尋訪模式,將旋轉過後的圖,重新映射回只有外框的圖上。



  (5)加上拉條,完成。


  (6)3/10補充:整張圖的旋轉:

  (6-1)可以選擇,要旋轉何種方式、並且有防呆機制

 (6-2)輸入a可以旋轉整張圖片



2022年2月25日 星期五

s1081416 作業1

作業說明:

撰寫一個程式讀取ㄧ張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入

圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖像(RGB),則只改變

每個像素的 R 值。


開發環境:

Windows11

Opencv 4.5.5

Python 3.10.2


實作方法:

1. 在輸入照片的網址並把照片存進資料夾後用imread()讀取

2. 用判斷式判斷照片是灰階圖或是彩色圖

3. 輸入要加上的像素值

4. 如果是彩色圖就把R值加上輸入的像素值,而如果是灰階圖就每個點都加上

5.          顯示最終結果


實作成果:

彩圖

100


-100

灰階圖

100



-100









 


2022年2月24日 星期四

s1061551 作業1

 

作業說明:

使用者將圖片的位置以及其所要更動的量輸入進去,並且將圖像中美一點的像素之值加上剛輸入的數值。如果讀取的圖像為灰階,則對該圖像的所有像素的灰階值進行更動,若是該圖像為彩色RGB圖像,則只更改其R值的部分。

 

開發環境:

Windows 11

Visual Studio 2019

OpenCV 4.5.5

 

程式說明

.1將所要讀取的圖片名稱以及所需要更改的值輸入

2.利用imread讀取圖片,若是失敗則output出錯誤訊息

3.另用判斷式來判斷該圖片為彩色或是灰階

4.利用迴圈來改變其值,若是灰階則將其全部更改,RGB則更動其R

5.顯示出最終結果

 

執行結果



s1073353 作業1

 作業說明

使用者輸入圖片的位置與要更動的量,讀取圖片將圖像中每一個點像素的值各加上剛輸入的數值。如果輸入圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖像RGB則只改變每個像素的R值。

開發環境

  • Windows 10
  • Visual Studio 2019
  • OpenCV 4.5.5

程式說明

  1. 輸入要讀的圖片名字和要加的值
  2. imread讀取圖片
  3. 確認輸入的檔案是灰階圖還是彩圖
  4. (續3)如果是彩圖的話確認每一個像素點的RGB是否相同
  5. (續4)如果遇到任何不相同的情況就將R加上輸入的值
  6. (續4)如果所有像素點的RGB都確認是一致的,就將每個像素的RGB全部都加上輸入的值
  7. (續3)若是灰階圖的話就將每個像素的值加上輸入的值
  8. 若加完後的值超過255則視為255,小於0則視為0
  9. imshow秀出圖片

執行結果