OpenCV-python 按位bitwise运算及Mask

OpenCV-python 按位bitwise运算及Mask

对 bitwise_and(),bitwise_or(),bitwise_xor(),bitwise_not()几个函数的理解

bitwise_and、bitwise_or、bitwise_xor、bitwise_not这四个按位操作函数。
void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 & src2
void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 | src2
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 ^ src2
void bitwise_not(InputArray src, OutputArray dst,InputArray mask=noArray());//dst = ~src
运算 描述 实例
AND 对二进制数据进行“与”操作 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
1&1=1,1&0=0,0&1=0,0&0=0
[1 0 1 0] and [0 0 1 1] = [0 0 1 0]
255AND 128= 128
(0b11111111 & 0b10000000=0b10000000)
OR 对二进制数据进行“或”操作只要对应的二个二进位有一个为1时,结果位就为1。
1|1=1,1|0=1,0|1=1,0|0=0
[1 0 1 0] OR[0 0 1 1]=[1 0 1 1]
XOR 对二进制数据进行“异或”操作 当两对应的二进位相异时,结果为1
1^1=0,1^0=1,0^1=1,0^0=0
[1 0 1 0] XOR[0 0 1 1]=[1 0 0 1]
NOT 是对二进制数据进行“非”操作 对数据的每个二进制位取反,即把1变为0,把0变为1 二进制数的补码形式
~1=0,~0=1
十进制:~60=-61
二进制:~0011 1100=1100 0011

Masking(掩膜运算) 即图与掩膜的“按位与”运算

利用掩膜(mask)进行“与”操作,即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除,其余按位操作原理类似只是效果不同而已。
如:1&1=1,1&0=0,0&1=0,0&0=0

  • 如果为真 二个数字大于0, 不管mask的值是多少,运算结果是原图的值
  • 如果为假,结果就是零

演示代码:

import numpy as np
import cv2
mat1 = np.array([[1, 0, 1,0]], dtype="uint8")
mat2 = np.array([[0, 0, 1,1]], dtype="uint8")
mask = np.array([[0, 0, 255,1]], dtype="uint8") 
print(cv2.bitwise_and(mat1, mat2))  # 按位与AND运算
print(cv2.bitwise_or(mat1, mat2)) # 按位或OR运算
and_mask = cv2.bitwise_and(mat1, mat2, mask=mask)
or_mask = cv2.bitwise_or(mat1, mat2, mask=mask)
print("and_mask:", and_mask)
print("or_mask:",or_mask)

运算结果

bitwise_and: [[0 0 1   0]]
mask:        [[0 0 255 1]] 
and_mask:    [[0 0 1 0]]  #1&255 保留原值1


bitwise_or:  [[1 0 1   1]]
mask:        [[0 0 255 1]]
or_mask:     [[0 0 1   1]]#1&255 保留原值1

参考博文1.
参考博文2.

你可能感兴趣的:(opencv-python)