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 郵箱登錄驗(yàn)證碼功能實(shí)現(xiàn)代碼
本文介紹了結(jié)合前端校驗(yàn)和后端Redis緩存策略實(shí)現(xiàn)郵箱登錄的功能,旨在提高安全性和效率,前端校驗(yàn)郵箱格式,后端生成并發(fā)送驗(yàn)證碼,使用Redis緩存驗(yàn)證碼以提高效率和安全性,感興趣的朋友一起看看吧2024-12-12
Python list列表中刪除多個(gè)重復(fù)元素操作示例
這篇文章主要介紹了Python list列表中刪除多個(gè)重復(fù)元素操作,結(jié)合實(shí)例形式分析了Python刪除list列表重復(fù)元素的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-02-02
記一次python 內(nèi)存泄漏問(wèn)題及解決過(guò)程
最近工作中慢慢開(kāi)始用python協(xié)程相關(guān)的東西,所以用到了一些相關(guān)模塊,如aiohttp, aiomysql, aioredis等,用的過(guò)程中也碰到的很多問(wèn)題,這里整理了一次內(nèi)存泄漏的問(wèn)題。分享到腳本之家平臺(tái),需要的朋友參考下2018-11-11
Django Admin 管理工具的實(shí)現(xiàn)
這篇文章主要介紹了Django Admin 管理工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Python基礎(chǔ)中的的if-else語(yǔ)句詳解
這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)中的的if-else語(yǔ)句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
python3.5 email實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了python3.5 email實(shí)現(xiàn)發(fā)送郵件功能,包含txt、圖片、HTML、附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
TensorFlow實(shí)現(xiàn)簡(jiǎn)單的CNN的方法
這篇文章主要介紹了TensorFlow實(shí)現(xiàn)簡(jiǎn)單的CNN的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

