s1091530 作業1

1. 開發環境

windows11

Python:3.8.13

opencv-python:4.7.0.72

numpy:1.24.2


2. 功能

先建立2個視窗,分別為Rotated image和Rotated CR image,並加入Trackbar,當Trackbar數值改變時,分別呼叫到 (a) rotate_rectangle_img() 以及 (b) rotate_CR_img() 兩個function,

    (a) 旋轉整張圖像 :

    讀取圖片大小,並取得圖片中心點來當作旋轉軸,

angle = cv2.getTrackbarPos('Trackbar','Rotated image') #取得當前Trackbar的值
M = cv2.getRotationMatrix2D(center, angle, 1.0) #將圖片轉向
img = cv2.warpAffine(img,M,(w,h)) #將圖像的每個像素點 (x, y) 映射到新的位置 (x', y')

    

(b) 旋轉內切圓:

讀取圖片大小,並取得圖片中心點來當作旋轉軸,內切圓和非內切圓(背景) 會分開處理,需要先建立mask,目的是讓兩個圖片合併時,不會互相干擾,因此顯示出來的顏色也不會互相影響。

#建立圓形部分遮罩 並將遮罩化成圓圈
rotate_mask = np.zeros((h,w), dtype=np.uint8)
cv2.circle(rotate_mask, center, min(h//2,w//2), 255, -1)

#建立背景遮罩
background_mask = cv2.bitwise_not(rotate_mask)

    

mask建立完後,要蓋到原圖片上面,就會得到內切圓的圖 以及 背景圖,

#將圓形遮罩蓋上 形成圓形圖片
rotate_image = cv2.bitwise_and(img, img, mask=rotate_mask)

#將背景遮罩蓋上 形成背景圖片
background_image = cv2.bitwise_and(img,img,mask=background_mask)

    

之後就會根據Tracebar的值來當成角度去旋轉內切圓的圖,

angle = cv2.getTrackbarPos('Trackbar','Rotated CR image') #取得當前Trackbar的值
M = cv2.getRotationMatrix2D(center, angle, 1.0) #將圖片轉向
rotate_image = cv2.warpAffine(rotate_image,M,(w,h))

    

最後就是將內切圓和背景合併就完成了。

output_image = cv2.add(rotate_image,background_image)


3. 執行結果



留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6