学习图像的算术运算-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
介绍
还记得你在小学学习如何加减数字吗?现在,你可以用图像做同样的事情!
输入图像可以执行算术运算,例如加法.减法和逐位运算(and.OR.NOT.XOR)。这些操作可以帮助提高输入照片的质量。
在本文中,您将学习使用OpenCV Python包对图像执行算术和逐位操作的步骤。让我们开始吧!
对图像执行算术运算意味着什么?
因此,假设我们要合并两张单独照片中的两个像素。我们如何将它们结合起来?
让我们想象一下下面的场景。第一个像素的颜涩强度为(200,0,0),而第二个像素的涩强度为(100,0,1)。如果我们把这些值加在一起,我们得到(300,0,0)。这在处理RGB图像时是完全可能的。
那么,我们如何在Python中解决这个问题呢?
该解决方案附带了一个OpenCV库,它实现了cv2.add()和cv2.subtract()函数。
要执行这些操作,必须在系统上安装OpenCV Python库。
算术运算:图像添加
使用cv2.add()函数,我们可以添加两个图像。Cv2.add()将图片像素添加到两个图像中。执行此操作时需要记住的一点是,这两个图像应该具有相同的深度和类型,或者第二个图像可以只是一个标量值。
此函数的语法为:cv2.add(img1,img2)
对于这个博客,我们将考虑以下两个图像来将它们添加到一起。
在执行算术运算之前,必须知道如何读取和显示加载的图像。
现在,按照下面的代码片段阅读,执行两个图像的添加,最后显示添加的图像。
导入cv2
img1=cv2.imread(';image1_add.jpg';,1)
#或
#img1=cv2.imread(';C:UsersAdminDownloadsimage1_add.jpg';,1)
cv2.imshow(图像1,img1)
cv2.waitKey(0)
cv2.销毁所有Windows()
img2=cv2.imread(';image2_add.jpg';,1)
#或
#img2=cv2.imread(';C:UsersAdminDownloadsimage_add.jpg';,1)
cv2.imshow(图像2,img2)
cv2.waitKey(0)
cv2.销毁所有Windows()
#添加图像
added_img=cv2.add(img1,img2)
cv2.imshow(';添加图像';,Added_img)
cv2.waitKey(0)
cv2.销毁所有Windows()
从上述代码片段添加的图像如下:
这只是一个简单的加法。我们可以使用另一个名为cv2.addWeighted的函数来混合图像。这类似于图像添加,但图像被赋予不同的权重以创建混合或透明度的错觉。
此函数的语法为:cv2.addWeighted(img1,wt1,img2,wt2,gamma Value)
按照下面的代码片段对两幅图像执行加权相加。
导入cv2
img1=cv2.imread(';image1_add.jpg';,1)
#或
#img1=cv2.imread(';C:UsersAdminDownloadsimage1_add.jpg';,1)
cv2.imshow(图像1,img1)
cv2.waitKey(0)
cv2.销毁所有Windows()
img2=cv2.imread(';image2_add.jpg';,1)
#或
#img2=cv2.imread(';C:UsersAdminDownloadsimage_add.jpg';,1)
cv2.imshow(图像2,img2)
cv2.waitKey(0)
cv2.销毁所有Windows()
#加法-加权加法
added_wt_img=cv2.add加权(img1,0.6,img2,0.4,0)
cv2.imshow(';添加权重图像';,Added_wt_img)
cv2.waitKey(0)
cv2.销毁所有Windows()
加权加法的输出如下:
这里,拍摄了两幅图像,将它们混合在一起。第一张图片的权重为0.6,第二张图片的重量为0.4。您可以根据需要更改图片的权重!
算术运算:图像减法
就像添加两幅图像一样,您可以减去两幅图像。这可以使用cv2.subtract()函数完成。请注意,要减去的图像必须具有相同的大小和深度。
此函数的语法为:cv2.subtract(src1,src2)
下面的代码片段展示了如何减去两幅图像。先前使用的图像(我们另外使用的图像)已被减去。
导入cv2
img1=cv2.imread(';image1_add.jpg';,1)
#或
#img1=cv2.imread(';C:UsersAdminDownloadsimage1_add.jpg';,1)
cv2.imshow(图像1,img1)
cv2.waitKey(0)
cv2.销毁所有Windows()
img2=cv2.imread(';image2_add.jpg';,1)
#或
#img2=cv2.imread(';C:UsersAdminDownloadsimage_add.jpg';,1)
cv2.imshow(图像2,img2)
cv2.waitKey(0)
cv2.销毁所有Windows()
img=cv2减法(img1,img2)
cv2.imshow(减影图像,sub_img)
cv2.waitKey(0)
cv2.销毁所有Windows()
减去的图像如下:
还可以试着减去两幅简单的图像,使它们更容易理解。使用的两张图片是:
减去的输出为:
既然我们已经学习了如何对图像执行算术运算,我们将继续对图像执行逐位运算。
按位操作
当我们只需要提取图像所需的元素时,我们将使用逐位操作。这些逐位技术用于各种计算机视觉应用,例如创建图像掩模.将水印应用于图像以及创建新图像。与OpenCV中的其他变形方法相比,这些操作适用于图像中的单个像素,以产生更准确的结果。在开始图像上的And.Or和Not操作之前,假设您熟悉三个基本的位运算符:And.Or和Not。OpenCV包含用于执行AND.OR和NON操作的内置函数。它们是按位与.按位与或按位非。考虑以下两个黑白图像。现在让我们将这三个操作应用于这两个图像,看看会发生什么。
导入cv2
#读取图像
img1=cv2.imread(';位_image_1.jpg';)
img2=cv2.imread(';位_image_2.jpg';)
位_与=cv2.位_与(img1,img2)
位_或=cv2.位_或(img1,img2)
位_非=cv2.位_非(img1)
cv2.imshow(';img1';,img1)
cv2.waitKey(0)
cv2.销毁所有Windows()
cv2.imshow(';img2';,img2)
cv2.waitKey(0)
cv2.销毁所有Windows()
cv2.imshow(与,位_AND)
cv2.waitKey(0)
cv2.销毁所有Windows()
cv2.imshow(';OR';,位_OR)
cv2.waitKey(0)
cv2.销毁所有Windows()
cv2.imshow(';NOT';,位_NOT)
cv2.waitKey(0)
cv2.销毁所有Windows()
上述代码段的输出如下所示:
我希望您已经学会了如何使用OpenCV对图像执行算术和逐位运算。
600学习网 » 学习图像的算术运算-600学习网