超詳細(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實(shí)現(xiàn)bucket排序算法實(shí)例分析
這篇文章主要介紹了python實(shí)現(xiàn)bucket排序算法,實(shí)例分析了Python排序的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05python游戲?qū)崙?zhàn)項(xiàng)目之智能五子棋
下五子棋嗎?信不信我讓你幾步你也贏不了?本篇為你帶來(lái)用python編寫(xiě)的五子棋小游戲,文中給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值2021-09-09對(duì)Python3 * 和 ** 運(yùn)算符詳解
今天小編就為大家分享一篇對(duì)Python3 * 和 ** 運(yùn)算符詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02跟老齊學(xué)Python之網(wǎng)站的結(jié)構(gòu)
本教程的最終目的就是教會(huì)大家如何使用Python制作網(wǎng)站,非常的詳盡,需要的朋友可以參考下2014-10-10python爬蟲(chóng)爬取指定內(nèi)容的解決方法
這篇文章主要介紹了python爬蟲(chóng)爬取指定內(nèi)容,爬取一些網(wǎng)站下指定的內(nèi)容,一般來(lái)說(shuō)可以用xpath來(lái)直接從網(wǎng)頁(yè)上來(lái)獲取,但是當(dāng)我們獲取的內(nèi)容不唯一的時(shí)候我們無(wú)法選擇,我們所需要的、所指定的內(nèi)容,需要的朋友可以參考下2022-06-06使用PyInstaller庫(kù)把Python程序打包成exe
這篇文章介紹了使用PyInstaller庫(kù)把Python程序打包成exe的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05