超詳細註釋之OpenCV按位AND OR XOR和NOT
這篇博客將介紹如何使用OpenCV應用按位AND、OR、XOR和NOT。上一篇學習瞭如何從圖像中裁剪和提取感興趣的區域(ROI),截取的都是矩形。但是如果想裁剪一個非矩形區域呢?該怎麼辦?
答案是同時應用位運算和掩蔽。
- AND:當且僅當兩個像素都大於零時,按位AND為真。
- OR:如果兩個像素中的任何一個大於零,則按位或為真。
- XOR:當且僅當兩個像素中的一個大於零,而不是兩個都大於零時,按位異或為真。
- NOT:按位NOT反轉圖像中的“開”和“關”像素。
比較好記的是AND交集、OR並集、XOR並集-交集、NOT——非取反;
1. 效果圖
矩形 VS 圓形效果圖如下:
AND操作效果圖如下,可以看到正方形的邊緣丟失瞭,因為矩形沒有圓形覆蓋那麼大的區域,因此兩個像素都沒有“開”。
OR操作效果圖如下,可以看到矩形和圓形被合並瞭。
XOR操作效果圖如下,可以看到正方形的中心被移走瞭,因為異或操作不能同時具有大於零的像素。
NOT操作效果圖如下,可以看到圓由前景白色背景黑色變成瞭前景黑色背景白色。
2. 源碼
# 對示例圖像應用AND、OR、XOR和NOT運算符。 # USAGE # python opencv_bitwise.py # 導入必要的包 import numpy as np import cv2 # 繪制一個矩形 rectangle = np.zeros((300, 300), dtype="uint8") cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1) cv2.imshow("Rectangle", rectangle) # 繪制一個圓 circle = np.zeros((300, 300), dtype = "uint8") cv2.circle(circle, (150, 150), 150, 255, -1) cv2.imshow("Circle", circle) # 'AND'操作——當輸入都是>0的像素時,則得到開操作像素為255白色,否則被設置為關閉,像素為0黑色 # 當且僅當兩個像素都大於零時,按位AND為真。 bitwiseAnd = cv2.bitwise_and(rectangle, circle) cv2.imshow("AND", bitwiseAnd) cv2.waitKey(0) # ‘OR'操作得到矩形和圓形的並集,隻要有一個>0,就得到255白色,否則為0 # 如果兩個像素中的任何一個大於零,則按位“或”為真。 bitwiseOr = cv2.bitwise_or(rectangle, circle) cv2.imshow("OR", bitwiseOr) cv2.waitKey(0) # ‘XOR'是OR的補集,僅當倆個像素有一個>0時,為白色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/
到此這篇關於超詳細註釋之OpenCV按位AND OR XOR和NOT的文章就介紹到這瞭,更多相關OpenCV按位AND OR XOR NOT內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Opencv圖像處理之詳解掩膜mask
- Python圖像處理之圖像算術與邏輯運算詳解
- Python-OpenCV教程之圖像的位運算詳解
- 基於Python的OpenCV骨架化圖像並顯示(skeletonize)
- python中opencv圖像疊加、圖像融合、按位操作的具體實現