OpenCV - Bitwise 연산

dumbbelldore·2025년 1월 28일
0

zero-base 33기

목록 보기
90/97

1. Bitwise 연산

1-1. 연산 종류

  • 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

1-2. bitwise_and() 예제

bwand = cv2.bitwise_and(bg1, bg2)
cv2.imwrite("data/bwand.jpg", bwand)

1-3. bitwise_or() 예제

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

1-4. bitwise_xor() 예제

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

1-5. bitwise_not() 예제

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


2. 이미지 마스킹

  • 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)


3. 색상 검출

  • 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


*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글