Bitwise 연산: 같은 픽셀에 있는 것들끼리 연산 해 주는 것

Bitwise - and 연산
# 검은색 배경에 흰색 사각형과 원 생성
rectangle = np.zeros((300, 300), dtype="uint8")
cv2.rectangle(rectangle, (50, 50), (250, 250), 255, -1)
circle = np.zeros((300, 300), dtype="uint8")
cv2.circle(circle, (150, 150), 120, 255, -1)
# 비트와이즈 AND 연산 - 두 이미지의 교집합 부분을 표시
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
# 결과 표시
cv2.imshow("Rectangle", rectangle)
cv2.imshow("Circle", circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 비트와이즈 OR 연산 - 두 이미지의 합집합 부분을 표시
bitwiseOr = cv2.bitwise_or(rectangle, circle)
# 비트와이즈 XOR 연산 - 두 이미지의 합집합에서 교집합을 뺀 부분을 표시
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
# 비트와이즈 NOT 연산 - 이미지의 색상을 반전
bitwiseNot = cv2.bitwise_not(circle)

src = cv2.imread('example_512.png')
# 원형 마스크 생성
mask = np.zeros(src.shape[:2], dtype="uint8")
cv2.circle(mask, (300, 200), 120, (255, 255, 255), -1)
# 원형 마스크 적용 (원형 부분만 보임)
masked_img = cv2.bitwise_and(src, src, mask=mask)
# 마스크 반전 (나머지 부분만 보임)
mask_inv = cv2.bitwise_not(mask)
masked_img_inv = cv2.bitwise_and(src, src, mask=mask_inv)
# 결과 표시
cv2.imshow("Original Image", src)
cv2.imshow("Masked Image (Circle Only)", masked_img)
cv2.imshow("Inverted Masked Image (Rest Only)", masked_img_inv)
cv2.waitKey(0)
cv2.destroyAllWindows()

img = cv2.imread('example_512.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.namedWindow('image')
cv2.createTrackbar('Hue Min', 'image', 0, 179, nothing)
cv2.createTrackbar('Hue Max', 'image', 0, 179, nothing)
cv2.createTrackbar('Sat Min', 'image', 0, 255, nothing)
cv2.createTrackbar('Sat Max', 'image', 255, 255, nothing)
cv2.createTrackbar('Val Min', 'image', 0, 255, nothing)
cv2.createTrackbar('Val Max', 'image', 255, 255, nothing)
while True:
h_min = cv2.getTrackbarPos('Hue Min', 'image')
h_max = cv2.getTrackbarPos('Hue Max', 'image')
s_min = cv2.getTrackbarPos('Sat Min', 'image')
s_max = cv2.getTrackbarPos('Sat Max', 'image')
v_min = cv2.getTrackbarPos('Val Min', 'image')
v_max = cv2.getTrackbarPos('Val Max', 'image')
# HSV 색상 범위 설정
lower_color = np.array([h_min, s_min, v_min])
upper_color = np.array([h_max, s_max, v_max])
mask = cv2.inRange(hsv, lower_color, upper_color)
result = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
key = cv2.waitKey(1)
if key == 27: # ESC 키를 누르면 종료
break
cv2.destroyAllWindows()

cv2.createTrackbar('Low Hue Min', 'image', 0, 179, nothing)
cv2.createTrackbar('Low Hue Max', 'image', 179, 179, nothing)
cv2.createTrackbar('High Hue Min', 'image', 160, 179, nothing)
cv2.createTrackbar('High Hue Max', 'image', 179, 179, nothing)
cv2.createTrackbar('Sat Min', 'image', 100, 255, nothing)
cv2.createTrackbar('Sat Max', 'image', 255, 255, nothing)
cv2.createTrackbar('Val Min', 'image', 100, 255, nothing)
cv2.createTrackbar('Val Max', 'image', 255, 255, nothing)
while True:
low_h_min = cv2.getTrackbarPos('Low Hue Min', 'image')
low_h_max = cv2.getTrackbarPos('Low Hue Max', 'image')
high_h_min = cv2.getTrackbarPos('High Hue Min', 'image')
high_h_max = cv2.getTrackbarPos('High Hue Max', 'image')
s_min = cv2.getTrackbarPos('Sat Min', 'image')
s_max = cv2.getTrackbarPos('Sat Max', 'image')
v_min = cv2.getTrackbarPos('Val Min', 'image')
v_max = cv2.getTrackbarPos('Val Max', 'image')
lower_red1 = np.array([low_h_min, s_min, v_min])
upper_red1 = np.array([low_h_max, s_max, v_max])
lower_red2 = np.array([high_h_min, s_min, v_min])
upper_red2 = np.array([high_h_max, s_max, v_max])
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
result = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
key = cv2.waitKey(1)
if key == 27: # ESC 키를 누르면 종료
break
cv2.destroyAllWindows()


img1 = cv2.imread('princess_512.png')
img2 = cv2.imread('warrior_512.png')
# 알파값 설정 (0.0에서 1.0 사이, 합쳐서 1이 되도록 구성하는 것이 좋음)
alpha = 0.4 # 첫 번째 이미지에 적용될 알파값
beta = 1.0 - alpha # 두 번째 이미지에 적용될 알파값
# 가중치 합성
result = cv2.addWeighted(img1, alpha, img2, beta, 0)

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