天天看點

OpenCV-python 按位bitwise運算及MaskOpenCV-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.

繼續閱讀