溧水网站建设,wordpress首页设计,天猫代运营电商公司排行榜,设计方案的步骤按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法#xff0c;使用OpenCV的按位逻辑运算函数可以对图像进行位与#xff08;AND#xff09;、位或#xff08;OR#xff09;、位非#xff08;NOT#xff09;和位异或#xff08;XOR#xff09;等操作。
通俗点就是…按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法使用OpenCV的按位逻辑运算函数可以对图像进行位与AND、位或OR、位非NOT和位异或XOR等操作。
通俗点就是将像素点的十进制值转成二进制 来运算
以下是一些常见的按位逻辑运算的应用场景
图像融合按位逻辑运算可以用于图像融合通过对两个图像进行位与、位或或位异或操作可以实现图像的混合、叠加、过渡和融合效果。这在图像处理、特效制作和图像合成中常用于创建创意效果和特殊效果。
图像分割和掩膜按位逻辑运算可以用于图像分割和掩膜操作。通过使用掩膜图像二进制图像可以通过位与运算提取图像中感兴趣的区域或者通过位或运算将不同的图像部分进行组合。这在图像分析、目标提取和图像编辑中常用于区域选择和图像掩膜操作。
图像修复和去除按位逻辑运算可以用于图像修复和去除。通过将损坏或缺失的区域与参考图像进行位与或位或运算可以实现对损坏区域的修复或去除。这在图像修复、恢复和去噪中常用于修复缺失区域或去除不需要的内容。
图像处理和特征提取按位逻辑运算可以用于图像处理和特征提取中的特定操作。例如通过使用位异或运算可以检测出两个图像之间的差异和变化。这在图像比较、图像匹配和特征提取等领域中常用于分析和检测图像之间的差异。
图像二值化和阈值操作按位逻辑运算可以用于图像二值化和阈值操作。通过与二值掩膜图像进行位与运算可以将图像中的像素根据阈值进行分割和二值化。这在图像分割、图像阈值化和图像二值化等领域中常用于分割图像和提取感兴趣的目标。
这些只是按位逻辑运算的一些常见应用场景实际上按位逻辑运算在图像处理和计算机视觉中具有广泛的应用。通过灵活运用按位逻辑运算可以实现各种图像处理和分析的需求。
按位与运算
在位与运算中当参与与运算的两个逻辑值都是真时结果才为真。其逻辑关系可以类比 图 3-4 所示的串联电路只有当两个开关都闭合时灯才会亮。 3-2 对与运算算子的不同情况进行了说明表中使用“and”表示与运算。 在 OpenCV 中可以使用 cv2.bitwise_and()函数来实现按位与运算其语法格式为 dst cv2.bitwise_and( src1, src2[, mask]] ) 式中 dst 表示与输入值具有同样大小的 array 输出值。 src1 表示第一个 array 或 scalar 类型的输入值。 src2 表示第二个 array 或 scalar 类型的输入值。 mask 表示可选操作掩码8 位单通道 array。
按位与操作有如下特点 将任何数值 N 与数值 0 进行按位与操作都会得到数值 0。 将任何数值 N这里仅考虑 8 位值与数值 2558 位二进制数是 1111 1111进行按位与操作都会得到数值 N 本身。 可以通过表 3-4 观察数值 N表中是 219与特殊值 0 和 255 进行按位与运算的结果。 根据上述特点可以构造一幅掩模具体后面会讲到什么是掩膜图像 M掩模图像 M 中只有两种值一种是数值 0另外 一种是数值 255。将该掩模图像 M 与一幅灰度图像 G 进行按位与操作在得到的结果图像 R 中 与掩模图像 M 中的数值 255 对应位置上的值来源于灰度图像 G。 与掩模图像 M 中的数值 0 对应位置上的值为零黑色。
下面使用数组演示与掩模图像的按位与运算
import cv2
import numpy as np
#定义一个5行5列的随机数组数据类型为 uint8
anp.random.randint(0,255,(5,5),dtypenp.uint8)
#定义一个5行5列的全零数组数据类型为 uint8
bnp.zeros((5,5),dtypenp.uint8)
#将数组 b 的第 1 行到第 3 行、第 1 列到第 3 列的元素设置为 255
b[0:3,0:3]255
#将数组 b 的第 5 行、第 5 列的元素设置为 255
b[4,4]255
#位与运算
ccv2.bitwise_and(a,b)
print(a\n,a)
print(b\n,b)
print(c\n,c)运行结果
a[[218 43 29 157 202][ 22 109 168 88 136][208 114 177 23 8][ 17 245 173 96 137][136 127 200 179 25]]
b[[255 255 255 0 0][255 255 255 0 0][255 255 255 0 0][ 0 0 0 0 0][ 0 0 0 0 255]]
c[[218 43 29 0 0][ 22 109 168 0 0][208 114 177 0 0][ 0 0 0 0 0][ 0 0 0 0 25]]从程序结果可以看出数组 c 来源于数组 a 与数组 b 的按位与操作。运算结果显示对于数组c 内的值与数组 b 中数值 255 对应位置上的值来源于数组 a与数组 b 中数值 0 对应位置上的值为 0验证了上面的 将任何数值 N 与数值 0 进行按位与操作都会得到数值 0。 将任何数值 N这里仅考虑 8 位值与数值 2558位二进制数是 1111 1111进行按位与操作都会得到数值 N 本身 下面我们用图片来构造一个掩模图像使用按位与运算保留图像中被掩模指定的部分
import cv2
import numpy as np
acv2.imread(lena.png,0)
#将 a 的像素值全部设置为 0及黑色
bnp.zeros(a.shape,dtypenp.uint8)
#将 b 的这个roi 区域 的像素值全部设置为 255及白色
b[100:400,200:400]255
#将 b 的这个roi 区域 的像素值全部设置为 255及白色
b[100:500,100:200]255
#将 a 和 b 进行按位与运算得到图像 c
ccv2.bitwise_and(a,b)cv2.imshow(a,a)
cv2.imshow(b,b)
cv2.imshow(c,c)
cv2.waitKey()
cv2.destroyAllWindows()运行效果 运行上述程序输出结果 左图是原始图像 lena中间的图是掩模图像右图是按位与结果图像可以看到被掩模指定的头部图像被保留在了运算结果中。
除了需要对灰度图像进行掩模处理还经常需要针对 BGR 模式的彩色图像使用掩模提取指定部分。由于按位与操作要求参与运算的数据有相同的通道所以无法直接将彩色图像与单 通道的掩模图像进行按位与操作。一般情况下可以通过将掩模图像转换为 BGR 模式的彩色 图像让彩色图像与掩模图像进行按位与操作实现掩模运算知需要将上面的代码中
acv2.imread(lena.png,0) 中的0 改成1
整体代码如下 import cv2
import numpy as np
acv2.imread(lena.png,1)
bnp.zeros(a.shape,dtypenp.uint8)
b[100:400,200:400]255
b[100:500,100:200]255
ccv2.bitwise_and(a,b)
print(a.shape,a.shape)
print(b.shape,b.shape)
print(c.shape,c.shape)
cv2.imshow(a,a)
cv2.imshow(b,b)
cv2.imshow(c,c)
cv2.waitKey()
cv2.destroyAllWindows()运行效果