OpenCV 之按位運算舉例解析

2021-10-07 07:35:30 字數 2916 閱讀 4817

掩碼操作

opencv 庫中包含很多運算函式,這裡著重介紹按位運算的基本原理並舉例說明。

【注】以上所有運算皆基於二進位制而來。

a = np.array([[

1],[

9],[

1],[

0],[

0]])

b = np.array([[

1],[

8],[

0],[

0],[

0]])

c = cv2.bitwise_and(a, b)

print

(c)

[[1

][8]

[0][

0][0

]]

這裡的 1&1=1,1&0=0,0&0=0 還好理解,但是 8&9=8 是怎麼回事嘞?

在介紹中我們說,按位運算都是基於二進位制來的,我們可以使用 bin() 函式來將數字轉換為二進位制形式,如 9 的二進位制形式為 1001,8 的二進位制形式為 1000。

a =

9b =

8print

(bin

(a))

print

(bin

(b))

print

(bin

(a & b)

)print

(a & b)

0b1001

0b1000

0b1000

8

由此可見,按位與操作分成三步:

與按位與操作相似,按位或操作也分為三步:

a = np.array([[

1],[

9],[

1],[

0],[

0]])

b = np.array([[

1],[

8],[

0],[

0],[

0]])

c = cv2.bitwise_and(a, b)

print

(c)

[[1

][9]

[1][

0][0

]]

這裡的 9 是因為:

a =

9b =

8print

(bin

(a))

print

(bin

(b))

print

(bin

(a | b)

)print

(a | b)

0b1001

0b1000

0b1001

9

同樣地,按位異或操作也是分為三步:

a = np.array([[

1],[

10],[

1],[

0],[

0]])

b = np.array([[

1],[

8],[

0],[

0],[

0]])

c = cv2.bitwise_xor(a, b)

print

(c)

[[0

][2]

[1][

0][0

]]

這裡的 2 是因為:

a =

10b =

8print

(bin

(a))

print

(bin

(b))

print

(bin

(a^b)

)print

(a^b)

0b1010

0b1000

0b10

2

a = np.array([[

9],[

4],[

1],[

0],[

0]])

b = cv2.bitwise_not(a)

print

(b)print

(a+b)

[[-

10][-

5][-

2][-

1][-

1]][

[-1]

[-1]

[-1]

[-1]

[-1]

]

由此可見按位反轉前後的陣列相加為 -1。

按位與操作和掩碼操作通常一起使用:

a = np.array([[

1],[

10],[

1],[

0],[

5]])

mask = np.array([[

0],[

1],[

0],[

1],[

0]], dtype=

'uint8'

)c = cv2.bitwise_and(a, a)

c_mask = cv2.bitwise_and(a, a, mask=mask)

print

(c)print

(c_mask)

[[1

][10]

[1][

0][5

]][[

0][10

][0]

[0][

0]]

經過掩碼操作,mask 置零的位置在 a 中也會被置零,mask 置一的位置在 a 中保持不變。

opencv 按位運算

1.按位與 cv.bitwise and dst cv.bitwise and scr1 scr2 dst mask scr1 輸入陣列1 scr2 輸入陣列2 dst 輸入陣列 與輸入陣列形狀和型別相同 mask 可選引數 8 位單通道陣列 用於指定要更改的元素位置 dst 目標影象 dst i ...

按位取反運算解析

今天我在看簡明python指南的時候,看到其中乙個計算機計算的問題,它是這樣描述的 x的按位取反結果為 x 1 5 輸出 6。有關本例的更多細節可以參閱 看到這兒我就疑惑了,之前在大學中學習的計算機基礎課程又還給教材了,hhh 無奈,我只好取網上搜尋解析的答案,而網上的解釋說得不太讓人明白,自己結合...

位運算 之(1) 按位與(AND) 操作

由於位運算直接對記憶體資料進行操作,不需要轉成十進位制,因此處理速度非常快。按位與 bitwise and 運算符號為 a b 的操作的結果 a b中對應位同時為1,則對應結果位也為1 例如 10010001101000101011001111000 10101100000000對101011000...