728x90
반응형
# 이미지 덧셈
cv2.add(image, 100)
# 일괄적으로 모든 픽셀에 100을 더하기
# 결과가 255보다 크면 255로, 255가 넘으면 255로 맞춰줌
# 두 개의 이미지 더하기
img1 = cv2.imread('chair.webp')
img2 = cv2.imread('explosion.webp')
cv2.add(chair, explosion)
show(cv2.add(img1, img2))
# 가중치를 곱하여 더하기(2:8로 더하고 일괄적으로 10 더함)
cv2.addWeighted(chair, 0.2, explosion, 0.8, 0)
# 이미지 뺄셈
# 일괄적으로 모든 픽셀에 100을 빼기
cv2.subtract(image, 100)
# 결과가 0보다 작으면 0으로 만듦
show(image + 100)
# 두 개의 이미지 빼기
black_circle = cv2.imread('black_circle.png')
show(cv2.subtract(chair, black_circle))
# 두 개의 이미지 차이의 절대값(순서에 영향 X)
show(cv2.absdiff(chair, explosion))
# 이미지를 뺄 때 순서가 다르면 다른 이미지로 반영됨
# 이미지 곱셈과 나눗셈
# 곱셈
cv2.multiply(image, 1.2)
# 나눗셈
cv2.divide(image, 1.2)
# 색 반전
255 - image
show(image + 100)
컬러 스페이스
색을 표현하는 방법
RGB: 빛의 삼원색인 빨강(R), 초록(G), 파랑(B)을 사용
과거에는 BGR이 널리 쓰이다, 현재는 RGB로 주류가 바뀜
OpenCV는 BGR이 주로 쓰이던 시절에 개발되어 BGR이 기본
HSV:
색상(Hue): 빨강, 파랑, 노랑 등
채도(Saturation): 진하다, 흐리다
명도(Value): 밝다, 어둡다
Gray: 흑백
## 컬러 스페이스 바꾸기
# BGR에서 흑백으로
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 흑백에서 BGR로(눈에 보이는 색은 바뀌지 않음)
show(cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR))
# BGR에서 HSV로
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
show(hsv)
# 채널 분리
# BGR 채널을 분리
b, g, r = cv2.split(image)
# B 채널만 보기(흑백으로 보임)
Image.fromarray(b)
# GR 채널을 0으로 채우면 파란색으로 볼 수 있음
z = np.zeros_like(b)
show(cv2.merge((b, z, r))) # z로 바꾸면 그 색상을 제외하고 나타내짐
# 특정 색상만 추출
# HSV에서 H가 40~80 사이, SV는 50~255 사이인 부분만 추출
lower_blue = np.array([40, 50, 50])
upper_blue = np.array([80, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
Image.fromarray(mask)
# 원래 이미지에서 mask 부분만 보기
show(cv2.bitwise_and(image, image, mask=mask))
# 이미지에 빨간 점 하나 찍기
dup = image.copy() # 복사
center = 100, 100 # 중심 좌표
radius = 10 # 반지름
color = 0, 0, 255 # 색상
thickness = -1 # 두께 설정 (-1은 채워진 원을 의미)
show(cv2.circle(dup, center, radius, color, thickness))
비트와이즈 연산
# 비트와이즈 연산
# 비트단위로 논리 연산
# 마스크를 적용할 경우, 마스크가 흰색인 부분만 통과
# AND: 두 이미지의 비트에 대해 AND(둘 다 1일 때만 1)
show(cv2.bitwise_and(image, dup))
# OR: 두 이미지의 비트에 대해 OR(둘 중 하나라도 1이면 1)
show(cv2.bitwise_or(image, dup))
# XOR: 두 이미지의 비트에 대해 XOR(둘 중 하나만 1이어야 1) → 다른 부분 찾기
show(cv2.bitwise_xor(image, dup))
728x90
반응형
'AI > 딥러닝(DL)' 카테고리의 다른 글
OpenCV 기초, 이미지 처리, 비디오 처리 (0) | 2024.11.11 |
---|---|
컴퓨터 비전 과업(Computer CV, Task) (0) | 2024.11.11 |
댓글