OpenCV 之按位運(yùn)算舉例解析
文章介紹
OpenCV 庫(kù)中包含很多運(yùn)算函數(shù),這里著重介紹按位運(yùn)算的基本原理并舉例說(shuō)明。
本篇文章中主要涉及到的函數(shù)有:
- 按位與:bitwise_and();
- 按位或:bitwise_or();
- 按位異或:bitwise_xor()。
- 按位反轉(zhuǎn):bitwise_not();
【注】以上所有運(yùn)算皆基于二進(jìn)制而來(lái)。
舉例說(shuō)明
1、bitwise_and()
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 是怎么回事嘞?
在介紹中我們說(shuō),按位運(yùn)算都是基于二進(jìn)制來(lái)的,我們可以使用 bin() 函數(shù)來(lái)將數(shù)字轉(zhuǎn)換為二進(jìn)制形式,如 9 的二進(jìn)制形式為 1001,8 的二進(jìn)制形式為 1000。
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a & b)) print(a & b)
0b1001
0b1000
0b1000
8
由此可見(jiàn),按位與操作分成三步:
1、將數(shù)字轉(zhuǎn)換成二進(jìn)制形式;
2、對(duì)同一位上的數(shù)字(0 或 1)進(jìn)行 & (and) 操作,即 1&1=1;1&0=0;0&0=0。
3、將 and 操作后的二進(jìn)制轉(zhuǎn)換回十進(jìn)制并輸出。
2、bitwise_or()
與按位與操作相似,按位或操作也分為三步:
1、將數(shù)字轉(zhuǎn)換成二進(jìn)制形式;
2、對(duì)同一位上的數(shù)字(0 或 1)進(jìn)行 | (or) 操作,即 1|1=1;1|0=1;0|0=0。
3、將 or 操作后的二進(jìn)制轉(zhuǎn)換回十進(jìn)制并輸出。
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 是因?yàn)椋?br />
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a | b)) print(a | b)
0b1001
0b1000
0b1001
9
3、bitwise_xor()
同樣地,按位異或操作也是分為三步:
1、將數(shù)字轉(zhuǎn)換成二進(jìn)制形式;
2、對(duì)同一位上的數(shù)字(0 或 1)進(jìn)行 ^ (xor) 操作,即 1^1=0;1^0=1;0^0=0。
3、將 xor 操作后的二進(jìn)制轉(zhuǎn)換回十進(jìn)制并輸出。
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 是因?yàn)椋?br />
a = 10 b = 8 print(bin(a)) print(bin(b)) print(bin(a^b)) print(a^b)
0b1010
0b1000
0b10
2
4、bitwise_not()
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]]
由此可見(jiàn)按位反轉(zhuǎn)前后的數(shù)組相加為 -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]]
經(jīng)過(guò)掩碼操作,mask 置零的位置在 a 中也會(huì)被置零,mask 置一的位置在 a 中保持不變。
到此這篇關(guān)于OpenCV 之按位運(yùn)算舉例解析的文章就介紹到這了,更多相關(guān)OpenCV 按位運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+tkinter模擬“記住我”自動(dòng)登錄實(shí)例代碼
這篇文章主要介紹了Python+tkinter模擬“記住我”自動(dòng)登錄實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python實(shí)現(xiàn)梯度法 python最速下降法
這篇文章主要為大家詳細(xì)介紹了python梯度法,最速下降法的原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式
這篇文章主要介紹了python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Python基于Matplotlib庫(kù)簡(jiǎn)單繪制折線圖的方法示例
這篇文章主要介紹了Python基于Matplotlib庫(kù)簡(jiǎn)單繪制折線圖的方法,涉及Python Matplotlib庫(kù)的相關(guān)使用技巧,需要的朋友可以參考下2017-08-08