图像上的 OpenCV 算术运算-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
OpenCV简介
图像可以执行算术运算,例如加法.减法和按位运算(and.OR.NOT.XOR)。这些操作可以帮助改善输入图像的属姓。
图像算法对于分析输入图像的属姓是必要的。操作后的图像可以用作增强的输入图像,并且可以对图像应用更多的操作以进行阈值化.膨胀等。
图像算术是将一个或多个图像应用于标准算术运算或逻辑运算符之一。运算符逐像素应用,因此输出图像中的像素值仅由输入图像中相应像素的值确定。
因此,图像通常必须具有相同的大小。当向图像添加恒定偏移量时,其中一个输入图像可以是恒定值。
虽然图像算法是图像处理的最基本形式,但它有许多应用。算术运算符的一个显著优点是过程简单,因此速度快。
添加图像
在其最基本的形式中,该运算符将两个大小相同的图像作为输入,并输出与前两个图像大小相同的第三个图像。每个像素值是两个输入图像的每个图像中的对应像素值的总和。更高级的版本允许在一次操作中组合多个图像。
运算符的一个常见变体只允许您向每个像素添加指定的常量。使用函数cv2.add(),我们可以添加两个图像。这直接将两个图像中的图像像素相加。
语法:cv2.add(image1,image2)
但是,添加像素并不是理想的情况。因此,我们使用cv2.addweighted()。请记住,两个输入图像的形状和颜涩通道必须相同。
语法:cv2.add Weighted(image1,weight1,Image2,weight2,gammaValue)
参数:
Image1:输入第一个图像数组
权重1:输入图像中用于最终图像的第一个图像元素的权重。
Image2:第二个图像阵列输入
权重2:将第二个输入图像元素的权重应用于最终图像的伽玛值。
Gamma值:光测量。
附加代码
导入cv2
将numpy导入为np
image1=cv2.imread(‘input1.jpg’)
image2=cv2.imread(‘input2.jpg’)
weightedSummadd=cv2.addWeighted(图像1,0.6,图像2,0.4,0)
cv2.imshow(“加权图像”,加权求和)
cv2.waitKey(0)
cv2.销毁所有Windows()
输出图像将为:
图像减法
像素减法运算器将两个图像作为输入并输出第三图像。像素值是第一图像的像素值减去第二图像的对应像素值。
通常使用单个图像作为输入,并从所有像素中减去一个恒定值。某些版本的运算符只会输出像素值之间的绝对差值,而不是直接带符号输出。
语法:cv2.subtract(image1,image2)
参数:
图1:第一个图像阵列输入(单通道.8位或浮点)
图2:第二个图像阵列输入(单通道.8位或浮点)
输入图像
代码:
导入cv2
将numpy导入为np
image1=cv2.imread(‘input1.jpg’)
image2=cv2.imread(‘input2.jpg’)
sub=cv2.减法(图像1,图像2)
cv2.imshow(“减法图像”,sub)
cv2.waitKey(0)
输出的减去图像将是
按位操作
位运算用于图像处理中提取重要部分。本文使用以下按位操作:
和
或
不是
XR公司
位操作对于图像掩码也很有用。这些操作可用于启用图像创建。这些操作可以帮助改善输入图像的属姓。
注:只能对相同大小的输入图像执行逐位操作。
图像的AND位运算
AND运算符(和NAND运算符以类似的方式)通常
Image1:第二个输入图像numpy数组目标:输出数组掩码:操作掩码图像
代码:
导入cv2
将numpy导入为np
img1=cv2.imread(‘input1.png’)
img2=cv2.imread(‘input2.png’)
dest_和=cv2.位_和(img2,img1,掩码=无)
cv2.imshow(“位与”,dest_和)
cv2.waitKey(0)
图像的OR位运算
OR运算符通常以两个二进制或灰度图像作为输入并输出第三图像,其像素值为第一图像的像素值和第二图像的对应像素。
该运算符的一个变体采用单个输入图像,并用一个恒定值对每个像素进行OR运算以生成输出。
语法:cv2.bitwise_or(source1,source2,destination,mask)
参数:
Source1:第一个输入numpy图像数组
Source2:第二个输入numpy图像数组
目标:输出数组图像
掩码:操作掩码,输入/输出8位单通道掩码。
代码:
导入cv2
将numpy导入为np
img1=cv2.imread(‘input1.png’)
img2=cv2.imread(‘input2.png’)
dest_或=cv2.位_或(img1,img2,掩码=无)
cv2.imshow(“位或”,dest_或)
cv2.waitKey(0)
图像的NOT位操作
逻辑否定,也称为反转,是一种以二进制或灰度图像为输入并生成照片负片的运算符。
语法:cv2.bitwise_ not(Image1,Destination,mask)
参数:
Image1:输入图像阵列
目标:输出数组图像
掩码:操作掩码
代码:
导入cv2
将numpy导入为np
img1=cv2.imread(‘input1.png’)
dest_not=cv2。按位_not(img1,掩码=无)
cv2.imshow(“位不”,目标不)
cv2.waitKey(0)
图像的XR位操作
所有正在处理的输入像素值必须具有相同的位数,否则可能会出现意外结果。当输入图像中的像素值不是简单的1位数字时,XOR操作通常(但不总是)对像素值中的每个对应位逐位执行。
语法:cv2.按位_xor(source1,source2,destination,mask)
参数:
源1:第一个输入图像阵列(单通道.8位或浮点)
源2:第二个输入图像阵列(单通道.8位或浮点)
目标:输出图像阵列
掩码:操作掩码,输入/输出8位单通道掩码。
代码:
导入cv2
将numpy导入为np
img1=cv2.imread(‘input1.png’)
img2=cv2.imread(‘input2.png’)
dest_or=cv2.按位_xor(img1,img2,掩码=无)
cv2.imshow(“位异或”,dest_XOR)
cv2.waitKey(0)
OpenCV结论
许多应用程序使用从同一场景的不同点获得的处理后的图像,例如通过添加相同场景的连续图像来减少噪声,或通过减去两个连续图像来执行运动检测。逻辑运算符通常用于组合两个(主要是二进制)图像。
对于整数图像,逻辑运算符通常按位使用。然后,例如,我们可以使用二进制掩码来选择图像的特定区域。
要点:
在本文中,我们学习了如何对图像执行各种算术运算,OpenCV方法是如何工作的,以及这些图像算术运算在何处使用。
600学习网 » 图像上的 OpenCV 算术运算-600学习网