본문 바로가기
Developer/OpenCV

[OpenCV] 비트와이즈 연산 (Bitwise)

by Doony 2020. 4. 9.

비트와이즈 연산은 주로 마스킹을 할 때 유용합니다. 일부 원하는 부분만을 마스킹을 톻해 얻어낼 수 있는 방법입니다.

OpenCV에서 제공하는 비트와이즈 연산

  • bitwise_and(img1, img2, mask=None): And 연산.
  • bitwise_or(img1, img2, mask=None): Or 연산
  • bitwise_Xor(img1, img2, mask=None): Xor 연산
  • bitwise_Not(img1, img2, mask=None): Not 연산

아래 예제코드를 보시면 어떤 영역이 각각 마스킹 되는지 확인하기 좋습니다.
각 픽셀에 대해 두 이미지들 간 And/Or/Xor/Not 등에 의해 연산됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import cv2
import numpy as np
import matplotlib.pylab as plt
 
img1 = np.zeros((200400))
img2 = np.zeros((200400))
 
img1[:, :200= 255 # 좌측만 흰색
img2[100:200, :] = 255 # 아래쪽만 흰색
 
bitAnd = cv2.bitwise_and(img1, img2)
bitOr = cv2.bitwise_or(img1, img2)
bitXor = cv2.bitwise_xor(img1, img2)
bitNot = cv2.bitwise_not(img1)
 
imgs = {'img1': img1, 'img2':img2, 'and':bitAnd, 'or': bitOr, 'Xor': bitXor, 'Not(img1)': bitNot}
 
for i, (title, img) in enumerate(imgs.items()):
    plt.subplot(32, i+1)
    plt.title(title)
    plt.imshow(img, 'gray')
    plt.xticks([]); plt.yticks([])
    
plt.show()
cs

댓글