使用 OpenCV 在图像上使用 Bitwise_AND
按位运算符通常用于对使用单个位操作的位或二进制数的模式执行按位运算。 OpenCV 使用相同的概念来处理和提取图像中的信息。
在本文中,我们将具体了解如何使用 Python OpenCV 库来使用 Bitwise AND。
OpenCV 中的位运算符
OpenCV 中使用的基本位运算符如下。
- 按位与
- 按位或
- 按位非
- 按位异或
OpenCV中使用位运算符,以便我们可以提取或过滤掉图像的一部分,描绘图像并使用非矩形ROI(感兴趣区域)进行操作。
在 OpenCV 中对图像使用按位与运算符
在 OpenCV 中,按位与运算符用于将两个不同的图像合并为一个,或者它可以将图像的某些部分合并为另一个。 它通常计算两个数组/标量/图像的每个元素的按位逻辑组合。
OpenCV 有一个内置的方法来执行按位运算。 所以对于 OpenCV 中的按位与运算符,我们使用 cv.bitwise_and()。
Syntax of Python OpenCV bitwise_and()
cv.bitwise_and( src1, src2[, dst[, mask]] ) -> dst
参数
src1 | 第一个输入数组/图像。 |
src2 | 第二个输入数组/图像。 |
dst | 与输入数组具有相同大小和类型的输出图像。 |
mask | 可选操作掩码,8 位单通道数组,指定要更改的输出数组的元素。 |
让我们看看如何通过下面显示的示例在图像上使用按位与运算符。
首先,我们必须将 OpenCV 导入为 cv,然后使用 OpenCV 的 imread()
方法,我们必须使用 imread()
读取两张图像。 此方法将读取提供的图像并以数组格式返回图像数据。
现在,我们必须将 imread()
返回的数据存储在名为 img1 和 img2 的变量中。 在应用按位与之前,您必须确保您使用的两个图像具有相同的形状,即相同的宽度、高度和通道数。
如果不确定图像的形状,可以使用 OpenCV 的 shape() 方法,如下所示。
代码片段:
# import opencv
import cv2 as cv
# read the images
img1 = cv.imread('img1.jpg')
img2 = cv.imread('img2.jpg')
print('Shape of img_1 : ', img1.shape)
print('Shape of img_2 : ', img2.shape)
dimension = (img2.shape[1], img2.shape[0])
img1 = cv.resize(img1, dimension, interpolation = cv.INTER_AREA)
print('Shape of img_1 : ', img1.shape)
print('Shape of img_2 : ', img2.shape)
输出:
Shape of img_1 : (4000, 6000, 3)
Shape of img_2 : (3133, 4700, 3)
Shape of img_1 : (3133, 4700, 3)
Shape of img_2 : (3133, 4700, 3)
在大多数情况下,两个图像的大小不会相同,因此您可能必须使用 resize()
方法调整图像大小,如上面的代码所示。 在这种情况下,您可以更改任一图像的大小或两个图像的大小。
对于此示例,我们将使用 resize()
方法将 img1 的大小更改为 img2 的大小,如上所示。
代码片段:
bitwise_AND = cv.bitwise_and(img1, img2)
cv.imshow('Image-1', img1)
cv.imshow('Image-2', img2)
cv.imshow('Bitwise-AND', bitwise_AND)
cv.waitKey(0)
现在我们有两个相同大小的图像,我们可以使用 cv.bitwise_and()
对给定的两个图像执行按位与运算,并将输出存储在名为按位与的变量中。 要显示所有输入、输出和结果图像,我们将使用 imshow()
函数。
我们正在显示所有图像,以阐明如何为输出图像显示输入图像。 这就是上面代码的输出结果。
我们还使用 waitKey()
方法并将值 0 传递给它,因为它允许用户在短时间内显示一个窗口或直到按下任何键。 因此,如果在参数中传递 0,它会一直等待,直到按下任何键。
这就是我们如何对两个相同大小的图像执行按位与。
相关文章
OpenCV 中的图像遮罩
发布时间:2023/06/01 浏览次数:55 分类:Python
-
如果我们想过滤掉图像的某些部分,然后将这个过滤掉的部分与另一幅图像结合起来,那么这可以使用遮罩来完成。 在 OpenCV 中,按位与运算符用于将两个不同的图像合并为一个,或者它可以将
Mac 中 Python 没有名为 CV2 的模块
发布时间:2023/06/01 浏览次数:83 分类:Python
-
我们将通过示例介绍如何在Python中正确安装和导入OpenCV模块。在 Python 的 Mac 中没有名为 CV2 的模块 首先,我们必须了解什么是 OpenCV 以及为什么在 Python 中使用它。
用 Python 发送带附件的电子邮件
发布时间:2023/06/01 浏览次数:83 分类:Python
-
本篇文章将介绍如何使用Python发送带附件的邮件。 为此,我们不需要外部库来发送邮件。 相反,我们导入一个名为 smtplib 的模块并使用它,因为邮件是通过 SMTP 协议发送的。 让我们看看我们该
在 Python 中验证电子邮件地址
发布时间:2023/06/01 浏览次数:76 分类:Python
-
有一些内置功能(例如正则表达式)和库(例如 dnspython)可以帮助完成这些过程。 本文将解释如何使用这些功能和库在 Python 中验证电子邮件。在 Python 中使用正则表达式验证电子邮件
使用 Python 向多个地址发送电子邮件
发布时间:2023/06/01 浏览次数:124 分类:Python
-
在本文中,我们将演示如何使用 Python 编程语言向使用不同电子邮件地址的不同收件人发送电子邮件。 具体来说,我们将向许多不同的人发送电子邮件。使用 Python 向多个地址发送电子邮件
Python 中的 SendGrid
发布时间:2023/06/01 浏览次数:129 分类:Python
-
SendGrid 是一家 SMTP 服务提供商,提供 Web API 以允许客户处理集成信息。 通过该服务提供的 API 密钥,可以在很短的时间内轻松发送各种电子邮件。
Python 线程优先级
发布时间:2023/06/01 浏览次数:159 分类:Python
-
使用 Python 线程,我们可以同时运行程序的不同部分,使您的程序设计更容易。 如果您了解一些 Python,我们将向您展示如何使用线程来加速您的 Python 程序。Python 中的线程
Python 线程队列
发布时间:2023/06/01 浏览次数:65 分类:Python
-
本篇文章将介绍限制 Python 中的活动线程数。Python 中的线程 Python 中的线程允许多个执行线程在单个进程中同时运行。
在 Python 中实现最小堆
发布时间:2023/06/01 浏览次数:181 分类:Python
-
本篇文章将介绍最小堆及其在 Python 中的实现。Python 中的最小堆 每个父节点都小于或等于最小堆中的子节点。 它遵循升序,优先级总是与较小的节点。