如何在OpenCV Python中对图像执行位异或操作?
彩色图像(RGB)有三个通道:红色、蓝色和绿色。图像表示为3维numpy数组。图像的像素值使用8位无符号整数(uint8)存储,范围为“0到255”。
对两个图像执行位异或运算是在相应图像的像素值的二进制表示上执行的。
以下是执行两个图像的位异或操作的语法 –
cv2.bitwise_xor(img1,img2,mask = None)
这里,img1和img2是两个输入图像,mask是一个掩码操作。
步骤
要计算两个图像之间的位异或运算,可以按照以下步骤操作 –
导入所需的库 OpenCV,Numpy 和 Matplotlib 。确保您已经安装了它们。
import cv2
import numpy as np
import matplotlib as plt
使用 cv2.imread() 方法读取图像。图像的宽度和高度必须相同。
img1 = cv2.imread('waterfall.jpg')
img2 = cv2.imread('work.jpg')
使用 cv2.biwise_xor(img1,img2) 计算两个图像的位异或。
xor_img = cv2.bitwise_xor(img1,img2)
显示位异或图像。
cv2.imshow('Bitwise XOR Image',xor_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们将使用以下图像作为 输入文件 在下面的示例中。
示例1
在下面的Python程序中,我们计算两个彩色图像的位异或。
#导入所需的库
import cv2
#读取两个图像。两个图像的尺寸必须相同。
img1 = cv2.imread('waterfall.jpg')
img2 = cv2.imread('work.jpg')
#计算两个图像的位异或
xor_img = cv2.bitwise_xor(img1,img2)
#显示计算的位异或图像
cv2.imshow('Bitwise XOR Image', xor_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当您运行此Python程序时,它将生成以下输出 –
示例2
以下程序显示了位异或操作在两个图像上的应用。我们创建了两个图像,一个圆形和一个相同大小的正方形。
# 导入所需的库
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 将第一个图像定义为一个圆
img1 = np.zeros((300, 300), dtype = "uint8")
img1 = cv2.circle(img1, (150, 150), 150, 255, -1)
# 将第二个图像定义为一个正方形
img2 = np.zeros((300,300), dtype="uint8")
img2 = cv2.rectangle(img2, (25, 25), (275, 275), 255, -1)
# 对img1和img2执行位异或运算(XOR)
xor_img = cv2.bitwise_xor(img1,img2)
# 显示位异或(XOR)输出图像
plt.subplot(131), plt.imshow(img1, 'gray'), plt.title("Circle")
plt.subplot(132), plt.imshow(img2,'gray'), plt.title("Square")
plt.subplot(133), plt.imshow(xor_img, 'gray'), plt.title("Bitwise XOR")
plt.show()
输出
运行该Python程序,将会产生以下输出 −