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)
留言
張貼留言