现在位置: 首页 > OpenCV 教程 > 正文

OpenCV 图像算术运算

在图像处理中,算术运算和位运算是非常基础且重要的操作。

本文将详细介绍如何使用 OpenCV 进行图像的加法、减法、乘法、除法、位运算以及图像混合操作。

1、基础运算

图像加法

图像加法是将两幅图像的对应像素值相加,生成一幅新的图像。

在 OpenCV 中,可以使用 cv2.add() 函数来实现图像加法。

实例

import cv2
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 中的图像算术运算、位运算以及图像混合操作。这些操作是图像处理的基础,掌握它们对于后续更复杂的图像处理任务至关重要。通过实践这些操作,你可以更好地理解图像处理的基本原理,并为后续的计算机视觉任务打下坚实的基础。