OpenCV对于图像的算术运算

1.常用运算

OpenCV图像运算包括如下函数:

  • 加法运算:add(src1, src2, dst=None, mask=None, dtype=None)
  • 减法运算:subtract(src1, src2, dst=None, mask=None, dtype=None)
  • 乘法运算:multiply(src1, src2, dst=None, scale=None, dtype=None)
  • 除法运算:divide(src1, src2, dst=None, scale=None, dtype=None)
  • 幂运算:pow(src, power, dst=None) 开方运算:sqrt(src, dst=None)
  • 自然常数e为底的指数函数:exp(src, dst=None)
  • 对数运算:log(src, dst=None)
  • 融合权重加法:addWeighted(src1, alpha, src2, beta, gamma, dst=None,dtype=None)
  • 位与运算:bitwise_and(src1, src2, dst=None, mask=None)
  • 位或运算:bitwise_or(src1, src2, dst=None, mask=None)
  • 位异或运算:bitwise_xor(src1, src2, dst=None, mask=None)
  • 位非运算:bitwise_not(src, dst=None, mask=None)

以上函数常用参数说明:

  • src:输入图像矩阵
  • src1、src2:两副大小和通道数相等的输入图像或一副输入图像和一个标量
  • dst:可选参数,目标图像输出,输出与输入图像大小相同。
  • scale:缩放因子,图像运算时,先执行src1*scale,再以该乘积进行后续运算
  • mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0。
  • dtype:可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位)

2.图像加法

通过add(src1, src2, dst=None, mask=None, dtype=None)来实现,参数见上,代码示例:

import numpy as np
import cv2 as cv
x = np.uint8([250])
y = np.uint8([10])
print(x+y)
print(cv.add(x,y))

需要注意的是,OpenCV加法是饱和运算,而Numpy加法是模运算。

3.图像融合

通过cv.addWeighted()来实现两张像素个数相同的图像的融合,此函数有5个参数:

①第一个图像名称img1
②第一个图像权值α
③第二个图象名称img2
④第二个图象权值β
⑤亮度调节值γ

函数计算公式为result = img1 × \times ×α+img2 × \times ×β+γ,代码示例:

import numpy as np
import cv2 as cv
img1 = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
img2 = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac2.jpg')
result = cv.addWeighted(img1, 0.3, img2, 0.7, 0)
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()

4.图像减法

通过cv.subtract(src1, src2, dst=None, mask=None, dtype=None)来实现,参数见上,其中scr1为作为被减数的图像数组,scr2为作为减数的图像数组。代码示例:

result = cv.subtract(img1, img2)

5.图像乘法

通过multiply(src1, src2, dst=None, scale=None, dtype=None)来实现,参数见上,实现了两个图像对应像素元素进行相乘,代码示例:

result = cv.multiply(img1, img2)

6.图像除法

通过divide(src1, src2, dst=None, scale=None, dtype=None)来实现,参数见上,其中scr1为作为被除数的图像数组,scr2为作为除数的图像数组,实现了两个图像对应像素元素进行相除,代码示例:

result = cv.divide(img1, img2)

7.图像位于运算

通过bitwise_and(src1, src2, dst=None, mask=None)来实现,参数见上,代码示例:

result = cv.bitwise_and(img1, img2)

8.其余运算

  • 幂运算:pow(src, power,dst=None),对图像的每个通道值计算power参数对应的幂作为结果图像的通道值,如果power为整数,则直接计算幂值,如果power为浮点数,则取通道值的绝对值参与计算
  • 开方运算:sqrt(src, dst=None),对图像的每个通道值开方作为结果图像的通道值,即:dst(I)=sqrt(src1(I))
  • 自然常数e为底的指数函数:exp(src, dst=None),以e为底对图像的每个通道值作为幂值计算结果图像的通道值
  • 对数运算:log(src, dst=None),计算图像的每个通道值的自然对数作为结果图像的通道值,即:dst(I)=ln(src(I))
  • 位或运算:bitwise_or(src1, src2, dst=None,mask=None),计算两副图像每个通道值或一图像通道值与一个标量的按位或的结果作为结果图像的通道值
  • 位异或运算:bitwise_xor(src1, src2, dst=None,mask=None),计算两副图像每个通道值或一图像通道值与一个标量的按位异或的结果作为结果图像的通道值
  • 位非运算:bitwise_not(src, dst=None, mask=None),将src图像的每个通道值按位取反作为结果图像的值。

参考https://blog.csdn.net/LaoYuanPython/article/details/108879397

9.threshold()函数讲解

ret, dst = cv2.threshold(src, thresh, maxval, type)

此函数用来固定阈值二值化,两个输出及四个参数分别为:

  • ret:设置的阈值,数值等于thresh
  • dst:输出图
  • src:单通道原图像
  • thresh:阈值,取值范围为(0~255),开始点
  • maxval:填充色,取值范围为(0~255),输出图像中灰度值最大值
  • type:阈值类型,如下所示:

未处理图像:
OpenCV对于图像的算术运算_第1张图片

阈值类型 计算方法 示例图像
THRESH_BINARY 阈值的二值化操作,超过阈值部分取maxval(最大值),小于阈值部分取0 OpenCV对于图像的算术运算_第2张图片
THRESH_BINARY_INV cv2.THRESH_BINARY的反转,大于阈值部分取0,小于阈值部分取maxval(最大值) OpenCV对于图像的算术运算_第3张图片
THRESH_TRUNC 进行截断操作,大于阈值部分设为阈值,小于阈值部分不变 OpenCV对于图像的算术运算_第4张图片
THRESH_TOZERO 进行化零操作,大于阈值部分不变,小于阈值部分取0 OpenCV对于图像的算术运算_第5张图片
THRESH_TOZERO_INV THRESH_TOZERO的反转,大于阈值部分取0,小于阈值部分不变 OpenCV对于图像的算术运算_第6张图片
THRESH_MASK 不支持
THRESH_OTSU 不支持32位
THRESH_TRIANGLE 不支持32位

参考https://blog.csdn.net/weixin_44690935/article/details/109003636

你可能感兴趣的:(python,opencv)