728x90

목표


  • 더하기, 빼기, 비트연산 등과 같은 이미지에 대한 연산
  • cv.add, cvaddWeighted 등

이미지 더하기


import numpy as np
import cv2 as cv

x = np.uint8([250])
y = np.uint8([10])

# 255  250+10 = 260 => 255
print(cv.add(x, y))
# 4    250 + 10 = 260 % 255 = 4
print(x + y)

add함수와 +연산과의 차이가 있다.

이미지 블렌딩


import numpy as np
import cv2 as cv

img1 = cv.imread('im.jpeg')
img2 = cv.imread('iu.png')

dst = cv.addWeighted(img1, 0.5, img2, 0.5, 0)

cv.imshow("dst", dst)
cv.waitKey(0)
cv.destroyAllWindows()

두 이미지 크기가 같아야지 addWeighted함수를 쓸수 있는 것 같다.

$$ dst = \alpha \circ img1 + \beta \circ img2 + \gamma $$

addWeighted 함수는 위에 수식과 같이 img1와 img2의 투명도를 주고 더하고 감마값만큼 더 추가해주는 방법이다.

비트연산


import numpy as np
import cv2 as cv

img1 = cv.imread('iu.png')
img2 = cv.imread('opencv.png')

rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols]

img2gray = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)

ret, mask = cv.threshold(img2gray, 20, 255, cv.THRESH_BINARY)

mask_inv = cv.bitwise_not(mask)         # 뒤집기

img1_bg = cv.bitwise_and(roi, roi, mask = mask_inv)

img2_fg = cv.bitwise_and(img2, img2, mask = mask)

dst = cv.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst

cv.imshow("test", img1)

cv.waitKey(0)
cv.destroyAllWindows()

붙일 img2를 흑백으로 만들어(cv.cvtColor) threshold를 사용해 0과 255의 값으로만 만든다.(cv.threshold)

mask를 만들어서 반대 mask_inv와 적용해 이미지들을 잘라내고 합쳐준다.

'언어 > OpenCV(Python)' 카테고리의 다른 글

이미지의 기하학적 변환(1)  (0) 2022.03.24
[OpenCV]색공간 변경  (0) 2022.03.23
[OpenCV]이미지의 기본연산  (0) 2022.03.21
[OpenCV]드로잉함수  (0) 2022.03.18
[OpenCV]비디오 가져오기  (0) 2022.03.17