目录
在计算机视觉领域,位运算是一种重要的技术,用于对图像进行像素级别的操作和处理。OpenCV是一个强大的计算机视觉库,提供了许多位运算函数,其中cv2.bitwise_and()函数用于执行图像的按位与操作。
1. 什么是按位与操作
按位与操作是指对两幅图像的像素进行逐位比较,当且仅当两幅图像的对应像素值都为1时,结果图像的对应像素值才为1;否则为0。这种操作常用于图像融合、掩码操作等场景。
2. cv2.bitwise_and()函数的语法
cv2.bitwise_and(src1, src2, dst=None, mask=None)
src1:第一幅输入图像
src2:第二幅输入图像
dst:可选参数,输出图像,与输入图像具有相同的尺寸和数据类型
mask:可选参数,掩码图像,用于指定哪些像素进行按位与操作
3. 掩码操作示例代码
import numpy as np
import cv2
# 读取图像
img = cv2.imread('1.jpg')
img = cv2.resize(img, dsize=None, fx=0.3, fy=0.3)
# 下面2行代码构造输出OpenCV图标的掩膜,255确保所有位都是1
imgMask = np.zeros(img.shape, dtype=np.uint8)
imgMask[100:200, 400:500] = 255
# 执行按位与操作
resultImg1 = cv2.bitwise_and(img, imgMask)
resultImg2 = cv2.bitwise_and(img, (255, 0, 0))
resultImg3 = cv2.bitwise_and(img, (0, 255, 0))
resultImg4 = cv2.bitwise_and(img, (0, 0, 255))
# 显示结果图像
cv2.imshow('resultImg1', resultImg1)
cv2.imshow('resultImg2', resultImg2)
cv2.imshow('resultImg3', resultImg3)
cv2.imshow('resultImg4', resultImg4)
cv2.waitKey(0)
输出图像如下:
第一张图像为遮盖一部分图像,第二、三、四张图像分别为仅保留蓝 、绿、红通道像素值。
4. 图像融合示例代码
import cv2
import numpy as np
# 读取两幅图像
img1 = cv2.imread('4.png')
img2 = cv2.imread('3.png')
#使图像大小一致
img2_resized = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
# 执行按位与操作
result = cv2.bitwise_and(img1, img2_resized)
# 显示结果图像
cv2.imshow('img1', img1)
cv2.waitKey(0)
cv2.imshow('img2', img2)
cv2.waitKey(0)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出图像如下:
5. 注意事项
输入图像的尺寸和数据类型必须相同,否则会导致错误。
可以使用掩码图像来指定哪些像素进行按位与操作。
按位与操作可以用于图像融合、掩码操作等场景,具有很高的实用性。