cv2.bitwise_and(): 두 이미지를 AND 연산하여 공통 영역 추출 (마스킹)cv2.bitwise_or(): 두 이미지를 OR 연산하여 둘 중 하나라도 값이 있는 영역 추출 (합성)cv2.bitwise_xor(): 두 이미지를 XOR 연산하여 서로 다른 값이 있는 영역 추출 (차이 강조)cv2.bitwise_not(): 한 이미지의 비트를 반대로 변환 (반전)# 실습용 도형 생성
import cv2
import numpy as np
# 검정 배경
bg1 = np.zeros((300, 300), dtype=np.uint8)
bg2 = np.zeros((300, 300), dtype=np.uint8)
# 큰 사각형
big = cv2.rectangle(bg1, (50, 50), (250, 250), 255, -1)
# 작은 사각형
small = cv2.rectangle(bg2, (150, 150), (280, 280), 255, -1)
cv2.imwrite("data/big.jpg", big)
cv2.imwrite("data/small.jpg", small)
big.jpg
small.jpg
bitwise_and() 예제bwand = cv2.bitwise_and(bg1, bg2)
cv2.imwrite("data/bwand.jpg", bwand)

bitwise_or() 예제bwor = cv2.bitwise_or(bg1, bg2)
cv2.imwrite("data/bwor.jpg", bwor)

bitwise_xor() 예제bwxor = cv2.bitwise_xor(bg1, bg2)
cv2.imwrite("data/bwxor.jpg", bwxor)

bitwise_not() 예제bwnot = cv2.bitwise_not(bg2)
cv2.imwrite("data/bwnot.jpg", bwnot)

bitwise_and()를 활용하여 컬러 이미지에 대한 마스킹을 수행할 수 있음img = cv2.imread("data/sunset.jpg")
# 검은 배경과 흰색 원 생성 (마스크)
mask = np.zeros(img.shape[:2], dtype=np.uint8)
cv2.circle(mask, (4000, 2000), 2000, 255, -1)
# mask의 픽셀이 0이 아닌 범위에 한해 img와 img를 AND 연산
img_masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite("data/sunset_masked.jpg", img_masked)

bitwise_and()를 활용하여 특정 색상으로 구현된 부분에 대한 검출을 실시할 수 있음img = cv2.imread("data/sunset.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 파란색 부분만 탐지하기 위한 조건
lower_color = np.array([100, 0, 0])
upper_color = np.array([140, 255, 255])
hsv_mask = cv2.inRange(hsv, lower_color, upper_color)
hsv_res = cv2.bitwise_and(img, img, mask=hsv_mask)
cv2.imwrite("data/hsv_mask.jpg", hsv_mask)
cv2.imwrite("data/hsv_res.jpg", hsv_res)
hsv_mask.jpg
hsv_res.jpg
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.