OpenCV(3):图像算术运算

发布于:2025-02-20 ⋅ 阅读:(129) ⋅ 点赞:(0)

        在图像处理中,算术运算和位运算是非常基础且重要的操作。本文将详细介绍如何使用 OpenCV 进行图像的加法、减法、乘法、除法、位运算以及图像混合操作。

1、基础运算

1.1 图像加法

        图像加法是将两幅图像的对应像素值相加,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.add() 函数来实现图像加法,注意两张图片需要保证尺寸相同,如果像素值相加后超过 255,OpenCV 会自动将其截断为 255。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 图像加法
result = cv2.add(img1, img2, dtype=cv2.CV_8U)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.2 图像减法

        图像减法是将两幅图像的对应像素值相减,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.subtract() 函数来实现图像减法。如果像素值相减后小于 0,OpenCV 会自动将其截断为 0。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 图像减法
result = cv2.subtract(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.3 图像乘法

        图像乘法是将两幅图像的对应像素值相乘,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.multiply() 函数来实现图像乘法。如果像素值相乘后超过 255,OpenCV 会自动将其截断为 255。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 图像乘法
result = cv2.multiply(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.4 图像除法

        图像乘法是将两幅图像的对应像素值相乘,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.multiply() 函数来实现图像乘法。如果像素值相乘后超过 255,OpenCV 会自动将其截断为 255。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 图像除法
result = cv2.divide(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

2 图像位运算 (AND, OR, NOT, XOR)

        位运算是对图像的每个像素进行二进制位操作。OpenCV 提供了 cv2.bitwise_and()cv2.bitwise_or()cv2.bitwise_not() 和 cv2.bitwise_xor() 函数来实现图像的位运算。

函数 功能 应用场景
cv2.bitwise_and() 按位与操作,只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算) 掩码操作、图像分割
cv2.bitwise_or() 按位或操作,参加运算的两个数只要两个数中的一个为1,结果就为1。 图像叠加
cv2.bitwise_not() 按位取反操作,单一图像进行取反。 图像反色
cv2.bitwise_xor() 按位异或操作,参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。 图像差异检测

2.1 位与运算 (AND)

        位与运算是对两幅图像的每个像素进行按位与操作。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 位与运算
result = cv2.bitwise_and(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 位或运算 (OR)

        位或运算是对两幅图像的每个像素进行按位或操作。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 位或运算
result = cv2.bitwise_or(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 位非运算 (NOT)

        位非运算是对图像的每个像素进行按位取反操作。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 位非运算
result = cv2.bitwise_not(img1)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 位异或运算 (XOR)

        位异或运算是对两幅图像的每个像素进行按位异或操作。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 位异或运算
result = cv2.bitwise_xor(img1, img2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

3 图像混合 (cv2.addWeighted())

        图像混合是将两幅图像按照一定的权重进行线性组合,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.addWeighted() 函数来实现图像混合。

import cv2

# 读取两幅图像
img1 = cv2.imread('image.jpg')
img2 = cv2.imread('bird.jpg')

# 图像混合
alpha = 0.7  # 第一幅图像的权重
beta = 0.3  # 第二幅图像的权重
gamma = 0  # 可选的标量值,通常设置为 0。

result = cv2.addWeighted(img1, alpha, img2, beta, gamma)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()


网站公告

今日签到

点亮在社区的每一天
去签到