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 |