Pin-Jiun / ComputerVision

0 stars 0 forks source link

12-Add, Subtract, AddWeighted #12

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

image

我們先建立一個我們今天用來輔助說明的遮罩: 我們將全部的值都設為128,也就是灰色的一張圖片!


print("Create mask:")
# make all 128 channel
mask = np.full(img.shape, 128).astype(np.uint8)
show_img(mask)

image

OpenCV 的圖片加法

add_result = cv2.add(img, mask)

很好理解,就是一個簡單的加法, 這件事情所實現的算法是「將圖片上對應的每一個點都相加」, 也就是某一個點是 128(灰色) + 128(灰色) = 256(超過255 = 白)

所以可想而知,加上我們的灰色遮罩,整個都要白起來了! image

OpenCV 的圖片減法

add_result = cv2.subtract(img, mask)

這也是一樣的意思,就是一個簡單的減法, 這件事情所實現的算法是「將圖片上對應的每一個點都相減」, 例如某一個點是 200(偏白色) - 128(灰色) = 72(偏黑)

所以可想而知,減掉我們的灰色遮罩,整個都要黑起來了!

OpenCV 的圖層疊加 (設定透明度並疊加)

overlapping82 = cv2.addWeighted(img, 0.8, mask, 0.2, 0)

其實我們幾乎只會使用這個來修圖… 前面那兩個… 暫時想不到用法 這個就是真正遮罩的概念了!

我們使用 cv2.addWeighted 這個函數就能實現接近圖層的效果了!

cv2.addWeighted(img1, alpha, img2, beta, gamma)

image

當我們想要進行圖片疊加時,例如把某個人P圖到另外一張圖上,就是需要用到這個函數!

https://www.wongwonggoods.com/all-posts/python/python_opencv/opencv-add-subtract-addweighted/