超詳細(xì)注釋之OpenCV按位AND OR XOR和NOT
這篇博客將介紹如何使用OpenCV應(yīng)用按位AND、OR、XOR和NOT。上一篇學(xué)習(xí)了如何從圖像中裁剪和提取感興趣的區(qū)域(ROI),截取的都是矩形。但是如果想裁剪一個(gè)非矩形區(qū)域呢?該怎么辦?
答案是同時(shí)應(yīng)用位運(yùn)算和掩蔽。
- AND:當(dāng)且僅當(dāng)兩個(gè)像素都大于零時(shí),按位AND為真。
- OR:如果兩個(gè)像素中的任何一個(gè)大于零,則按位或?yàn)檎妗?/li>
- XOR:當(dāng)且僅當(dāng)兩個(gè)像素中的一個(gè)大于零,而不是兩個(gè)都大于零時(shí),按位異或?yàn)檎妗?/li>
- NOT:按位NOT反轉(zhuǎn)圖像中的“開(kāi)”和“關(guān)”像素。
比較好記的是AND交集、OR并集、XOR并集-交集、NOT——非取反;
1. 效果圖
矩形 VS 圓形效果圖如下:

AND操作效果圖如下,可以看到正方形的邊緣丟失了,因?yàn)榫匦螞](méi)有圓形覆蓋那么大的區(qū)域,因此兩個(gè)像素都沒(méi)有“開(kāi)”。

OR操作效果圖如下,可以看到矩形和圓形被合并了。

XOR操作效果圖如下,可以看到正方形的中心被移走了,因?yàn)楫惢虿僮鞑荒芡瑫r(shí)具有大于零的像素。

NOT操作效果圖如下,可以看到圓由前景白色背景黑色變成了前景黑色背景白色。

2. 源碼
# 對(duì)示例圖像應(yīng)用AND、OR、XOR和NOT運(yùn)算符。
# USAGE
# python opencv_bitwise.py
# 導(dǎo)入必要的包
import numpy as np
import cv2
# 繪制一個(gè)矩形
rectangle = np.zeros((300, 300), dtype="uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)
cv2.imshow("Rectangle", rectangle)
# 繪制一個(gè)圓
circle = np.zeros((300, 300), dtype = "uint8")
cv2.circle(circle, (150, 150), 150, 255, -1)
cv2.imshow("Circle", circle)
# 'AND'操作——當(dāng)輸入都是>0的像素時(shí),則得到開(kāi)操作像素為255白色,否則被設(shè)置為關(guān)閉,像素為0黑色
# 當(dāng)且僅當(dāng)兩個(gè)像素都大于零時(shí),按位AND為真。
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)
# ‘OR'操作得到矩形和圓形的并集,只要有一個(gè)>0,就得到255白色,否則為0
# 如果兩個(gè)像素中的任何一個(gè)大于零,則按位“或”為真。
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)
# ‘XOR'是OR的補(bǔ)集,僅當(dāng)倆個(gè)像素有一個(gè)>0時(shí),為白色255
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
cv2.imshow("XOR", bitwiseXor)
cv2.waitKey(0)
# ‘NOT'操作:0變成255,255變成0
bitwiseNot = cv2.bitwise_not(circle)
cv2.imshow("NOT", bitwiseNot)
cv2.waitKey(0)
參考 https://www.pyimagesearch.com/2021/01/19/opencv-bitwise-and-or-xor-and-not/
到此這篇關(guān)于超詳細(xì)注釋之OpenCV按位AND OR XOR和NOT的文章就介紹到這了,更多相關(guān)OpenCV按位AND OR XOR NOT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python獲取中國(guó)節(jié)假日數(shù)據(jù)記錄入JSON文件
項(xiàng)目系統(tǒng)內(nèi)置的日歷應(yīng)用為了提升用戶體驗(yàn),特別設(shè)置了在調(diào)休日期顯示“休”的UI圖標(biāo)功能,那么問(wèn)題是這些調(diào)休數(shù)據(jù)從哪里來(lái)呢?我嘗試一種更為智能的方法:Python獲取中國(guó)節(jié)假日數(shù)據(jù)記錄入JSON文件2025-04-04
利用python3隨機(jī)生成中文字符的實(shí)現(xiàn)方法
最近在學(xué)習(xí)python3,發(fā)現(xiàn)網(wǎng)上關(guān)于ptyhon3隨機(jī)生成中文的資料非常少,所以決定將自己實(shí)現(xiàn)的方法分享下,下面這篇文章主要給大家介紹了關(guān)于利用python3隨機(jī)生成中文字符的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-11-11
11個(gè)案例講透Python函數(shù)參數(shù)小結(jié)
本文主要介紹了11個(gè)案例講透Python函數(shù)參數(shù)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
詳解分布式任務(wù)隊(duì)列Celery使用說(shuō)明
這篇文章主要介紹了詳解分布式任務(wù)隊(duì)列Celery使用說(shuō)明,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Python連接mysql數(shù)據(jù)庫(kù)及簡(jiǎn)單增刪改查操作示例代碼
這篇文章主要介紹了Python連接mysql數(shù)據(jù)庫(kù)及簡(jiǎn)單增刪改查操作示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
python中實(shí)現(xiàn)json數(shù)據(jù)和類(lèi)對(duì)象相互轉(zhuǎn)化的四種方式
在日常的軟件測(cè)試過(guò)程中,測(cè)試數(shù)據(jù)的構(gòu)造是一個(gè)占比非常大的活動(dòng),對(duì)于測(cè)試數(shù)據(jù)的構(gòu)造,分為結(jié)構(gòu)化的數(shù)據(jù)構(gòu)造方式和非結(jié)構(gòu)化的數(shù)據(jù)構(gòu)造方式,此篇文章,會(huì)通過(guò)4種方式來(lái)展示json數(shù)據(jù)與python的類(lèi)對(duì)象相互轉(zhuǎn)化,需要的朋友可以參考下2024-07-07
Python爬蟲(chóng)之xlml解析庫(kù)(全面了解)
下面小編就為大家?guī)?lái)一篇Python爬蟲(chóng)之xlml解析庫(kù)(全面了解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

