opencv中的逻辑运算包含了:按位与、按位或、按位非、按位异或四种逻辑运算
首先
按位与操作:
一般格式:dst=cv2.bitwise_and(src1,src2[,mask])
其中mask(也就是掩码)的作用如下:
1.提取感兴趣区:用预先制作的感兴趣区掩膜与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;
2. 屏蔽作用:用掩膜对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计;
3. 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征;
4. 特殊形状图像的制作。
归根到底,掩码就是两个图像之间的逻辑操作,获得自己想要的一部分图像。
src1,src2就是具体的输入的图像
具体的代码例:
import cv2 as cv
import numpy as np
image1=cv.imread(r'E:\shiyan\1.jpg')
cv.imshow('image',image1)
image2=np.zeros(image1.shape,dtype=np.uint8)
#image1.shape,构造一个和image一样大小的o矩阵,本来np.zeros()应在括号内输入所需生成矩阵的行列,但此处直接用上述的语句来应用就好。
image2[100:400,100:400]=255
#将上述的掩膜,进行图像切片(按自己喜好的图像大小):
#图像上边距离原图上边100像素
#图像下边距离原图上边400像素
#图像左边距离原图左边100像素
#图像右边距离原图左边400像素
切片大小:300*300像素
cv.imshow('image2',image2)#展示一下切好片的掩膜
image3=cv.bitwise_and(image1,image2)
cv.imshow('image3',image3)
cv.waitKey()
cv.destroyWindow()
'''
#np.zeros函数的作用
#返回来一个给定形状和类型的用0填充的数组;
#zeros(shape, dtype=float, order=‘C’)
#shape:形状
#dtype:数据类型,可选参数,默认numpy.float64
#order:可选参数,c代表与c语言类似,行优先;F代表列优先
print(np.zeros((2,5)))
#结果为一个2行5列的矩阵
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
print(np.zeros((2,5),dtype= np.int))
#结果为
[[0 0 0 0 0]
[0 0 0 0 0]]
按位或操作
代码格式:dst=cv2.bitwise_or(src1,src2[,mask])
image3=cv.bitwise_or(image1,image2)
按位非
代码格式:dst=cv2.bitwise_not(src1[,mask])
import cv2 as cv
import numpy as np
image1=cv.imread(r'E:\shiyan\1.jpg')
cv.imshow('image',image1)
image3=cv.bitwise_not(image1)
cv.imshow('image3',image3)
cv.waitKey()
cv.destroyWindow()