opencv的逻辑运算-- 与、或、非 异或
【摘要】 opencv的逻辑运算-- 与、或、非 异或
python中的异或
例如:^符号是键盘在英文状态下的 shift+6组合键
a=1 ^ 0
print(a)
输出:
1
那么,我们在opencv中怎么来使用呢?
与运算
opencv中的逻辑运算就是对应位置元素进行与或非,异或。
举例:
a=204 & 213
print(a)
输出:
196
说明:python先将204和213转为二进制,然后做”与“运算,然后再将他们转为十进制,并输出!
非运算
在python中
举例:
a=~255
print(a)
输出:
-256
但是,在opencv中我们用非运算后,只会在0~255之间来回取反。不会超过0~255的范围。
opencv中的逻辑运算
非运算
举例:
import cv2
import numpy as np
# 读取图片
# luo = cv2.imread('baocun.jpg')
lufei = cv2.imread('1.jpg')
# 非操作 相当于255-图片的色值
lufei_not = cv2.bitwise_not(lufei)#把路飞这张图片进行”非“运算
img = np.hstack((lufei,lufei_not))#将原图片和取非后的图片合并显示
img1 = cv2.resize(img,None,fx=0.5,fy=0.5)#调节显示图片的大小
cv2.imshow('not',img1)
print(lufei[:2,:2])
print(lufei_not[:2,:2])
cv2.waitKey()
cv2.destroyAllWindows()
输出结果与显示结果:
[[[ 95 88 49]
[ 96 89 50]]
[[115 109 68]
[115 109 68]]]
[[[160 167 206]
[159 166 205]]
[[140 146 187]
[140 146 187]]]
打印结果的说明:255 - 第一组是原图片的色值数组 = 取非后的图片色值数组
与运算
举例:
import cv2
import numpy as np
# 读取图片
lufei= cv2.imread('3.png')
luo= cv2.imread('4.png')
#对两张图片进行切片
new_lufei = lufei[0:3600,:5000]
new_luo = luo[0:3600,:5000]
# 进行逻辑”与运算“
cat_and = cv2.bitwise_and(new_lufei,new_luo)
img = np.hstack((new_lufei,cat_and))#两张图片合并
img1 = cv2.resize(img,(1000,800))#调节显示图片的大小
cv2.imshow('and',img1)
print(new_lufei[:2,:2])
print(new_luo[:2,:2])
print('---------------------------')
print(cat_and[:2,:2])
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果与显示结果:new_lufei的二进制色值 + new_luo的二进制色值 = cat_and的二进制色值->cat_and的十进制色值
[[[ 95 88 49]
[ 95 88 49]]
[[102 95 57]
[102 95 57]]]
[[[69 58 51]
[68 57 51]]
[[67 55 50]
[66 54 50]]]
---------------------------
[[[69 24 49]
[68 24 49]]
[[66 23 48]
[66 22 48]]]
验证:(只验了数组的第一个值)
a=95 & 69
print(a)
结果:
69
或运算
举例:
import cv2
import numpy as np
# 读取图片
lufei= cv2.imread('3.png')
luo= cv2.imread('4.png')
#对两张图片进行切片
new_lufei = lufei[0:3600,:5000]
new_luo = luo[0:3600,:5000]
# 进行逻辑”与运算“
cat_and = cv2.bitwise_or(new_lufei,new_luo)
img = np.hstack((new_lufei,cat_and))#两张图片合并
img1 = cv2.resize(img,(1000,800))#调节显示图片的大小
cv2.imshow('and',img1)
print(new_lufei[:2,:2])
print(new_luo[:2,:2])
print('---------------------------')
print(cat_and[:2,:2])
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果与显示结果:
[[[ 95 88 49]
[ 95 88 49]]
[[102 95 57]
[102 95 57]]]
[[[69 58 51]
[68 57 51]]
[[67 55 50]
[66 54 50]]]
---------------------------
[[[ 95 122 51]
[ 95 121 51]]
[[103 127 59]
[102 127 59]]]
验证:(只验了数组的第一个值)
a=95 | 69
print(a)
结果:
95
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)