OpenCV 图像算术运算
在图像处理中,算术运算和位运算是非常基础且重要的操作。
本文将详细介绍如何使用 OpenCV 进行图像的加法、减法、乘法、除法、位运算以及图像混合操作。
1、基础运算
图像加法
图像加法是将两幅图像的对应像素值相加,生成一幅新的图像。
在 OpenCV 中,可以使用 cv2.add()
函数来实现图像加法。
实例
import numpy as np
# 读取两幅图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 图像加法
result = cv2.add(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:如果像素值相加后超过 255,OpenCV 会自动将其截断为 255。
图像减法
图像减法是将两幅图像的对应像素值相减,生成一幅新的图像。
在 OpenCV 中,可以使用 cv2.subtract()
函数来实现图像减法。
实例
result = cv2.subtract(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:如果像素值相减后小于 0,OpenCV 会自动将其截断为 0。
图像乘法
图像乘法是将两幅图像的对应像素值相乘,生成一幅新的图像。
在 OpenCV 中,可以使用 cv2.multiply()
函数来实现图像乘法。
实例
result = cv2.multiply(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:如果像素值相乘后超过 255,OpenCV 会自动将其截断为 255。
图像除法
图像除法是将两幅图像的对应像素值相除,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.divide()
函数来实现图像除法。
实例
result = cv2.divide(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:如果除数为 0,OpenCV 会自动将结果设置为 0。
2、图像位运算 (AND, OR, NOT, XOR)
位运算是对图像的每个像素进行二进制位操作。
OpenCV 提供了 cv2.bitwise_and()
、cv2.bitwise_or()
、cv2.bitwise_not()
和
cv2.bitwise_xor()
函数来实现图像的位运算。
函数 | 功能 | 应用场景 |
---|---|---|
cv2.bitwise_and() | 按位与操作 | 掩码操作、图像分割 |
cv2.bitwise_or() | 按位或操作 | 图像叠加 |
cv2.bitwise_not() | 按位取反操作 | 图像反色 |
cv2.bitwise_xor() | 按位异或操作 | 图像差异检测 |
位与运算 (AND)
位与运算是对两幅图像的每个像素进行按位与操作。
实例
result = cv2.bitwise_and(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
位或运算 (OR)
位或运算是对两幅图像的每个像素进行按位或操作。
实例
result = cv2.bitwise_or(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
位非运算 (NOT)
位非运算是对图像的每个像素进行按位取反操作。
实例
result = cv2.bitwise_not(img1)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
位异或运算 (XOR)
位异或运算是对两幅图像的每个像素进行按位异或操作。
实例
result = cv2.bitwise_xor(img1, img2)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
3、图像混合 (cv2.addWeighted())
图像混合是将两幅图像按照一定的权重进行线性组合,生成一幅新的图像。
在 OpenCV 中,可以使用 cv2.addWeighted()
函数来实现图像混合。
实例
alpha = 0.7 # 第一幅图像的权重
beta = 0.3 # 第二幅图像的权重
gamma = 0 # 可选的标量值
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
参数说明:
alpha
:第一幅图像的权重。beta
:第二幅图像的权重。gamma
:可选的标量值,通常设置为 0。
公式:
result = img1 * alpha + img2 * beta + gamma
总结
本文详细介绍了 OpenCV 中的图像算术运算、位运算以及图像混合操作。这些操作是图像处理的基础,掌握它们对于后续更复杂的图像处理任务至关重要。通过实践这些操作,你可以更好地理解图像处理的基本原理,并为后续的计算机视觉任务打下坚实的基础。