이미지 덧셈
- 일괄적으로 모든 픽셀에 100을 더하기 (결과가 255보다 크면 255)
cv.add(image, 100)
- 덧셈의 결과 보기(이하의 코드에서도 결과를 보려면 show()를 추가)
show(cv.add(image, 100))
chair = cv.imread('chair.webp')
explosion = cv.imread('explosion.webp')
cv.add(chair, explosion)
- 가중치를 곱하여 더하기(2:8로 더하고 일괄적으로 10 더함)
cv.addWeighted(chair, 0.2, explosion, 0.8, 10)
이미지 뺄셈
- 일괄적으로 모든 픽셀에 100을 빼기(결과가 0보다 작으면 0)
cv.subtract(image, 100)
black_circle = cv.imread('black_circle.png')
cv.subtract(chair, black_circle)
- 두 개의 이미지 차이의 절대값(순서에 영향 X)
cv.absdiff(chair, explosion)
cv.absdiff(explosion, chair)
이미지 곱셈과 나눗셈
cv.multiply(image, 3.0)
cv.divide(image, 3.0)
255 - image
컬러 스페이스
- 색을 표현하는 방법
- RGB: 빛의 삼원색인 빨강(R), 초록(G), 파랑(B)을 사용
- 과거에는 BGR이 널리 쓰이다, 현재는 RGB로 주류가 바뀜
- OpenCV는 BGR이 주로 쓰이던 시절에 개발되어 BGR이 기본
- HSV:
- 색상(Hue): 빨강, 파랑, 노랑 등
- 채도(Saturation): 진하다, 흐리다
- 명도(Value): 밝다, 어둡다
- Gray: 흑백
컬러 스페이스 바꾸기
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
- 흑백 이미지는 PIL 형식으로 바꿀 때 show 대신 Image.fromarray만으로도 됨 (채널이 1개 뿐임)
- show(gray)도 됨
Image.fromarray(gray)
- 흑백에서 BGR로(눈에 보이는 색은 바뀌지 않음)
cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
채널 분리
b, g, r = cv.split(image)
Image.fromarray(b)
- GR 채널을 0으로 채우면 파란색으로 볼 수 있음
z = np.zeros_like(b)
show(cv.merge((b, z, z)))