OpenCV图像算数运算可莉版

发布于:2025-07-31 ⋅ 阅读:(24) ⋅ 点赞:(0)


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

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

一、图像加法

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

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

import cv2
import numpy as np

# 读取一张图片
img1 = cv2.imread('D:\Word\keli.jpg')
# 移动这张图片的位置作为图片2
w,h = img1.shape[:2]
M = np.float32([[1, 0, 0], [0, 1, 100]])
img2 = cv2.warpAffine(img1, M, (w, h))
cv2.imwrite('D:\Word\keli-move2.jpg', img2)
# 图像加法
img = cv2.add(img1, img2)
cv2.imwrite('D:\Word\keli-add.jpg', img)

cv2.destroyAllWindows()

原图:
在这里插入图片描述
移动后:
在这里插入图片描述
相加之后:
在这里插入图片描述
注意:如果像素值相加后超过 255,OpenCV 会自动将其截断为 255

二、图像减法

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

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

import cv2
import numpy as np
# 读取这张图片
img1 = cv2.imread('D:\Word\keli.jpg')
w,h = img1.shape[:2]
# 这是移动
M = np.float32([[1, 0, 0], [0, 1, 100]])
# 这是不移动
M = np.float32([[1, 0, 0], [0, 1, 0]])
img2 = cv2.warpAffine(img1, M, (w, h))
cv2.imwrite('D:\Word\keli-move2.jpg', img2)
cv2.imshow('img2', img2)
cv2.waitKey(0)
# 图像减法
img = cv2.subtract(img1, img2)
cv2.imwrite('D:\Word\keli-sub2.jpg', img)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

不移动减完以后是全黑
移动以后因为大块背景是白色的,出现了负片的效果,所以要做到真正的负片只需要用纯白的图减去原图即可
在这里插入图片描述
注意:如果像素值相减后小于 0,OpenCV 会自动将其截断为 0。

三、图像乘法

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

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

   img1 = cv2.imread('D:\Word\keli.jpg')
	# 变暗
    img = cv2.multiply(img1, 0.7)
    # 变亮
    img = cv2.multiply(img1, 1.2)
    cv2.imwrite('D:\Word\keli-change2.jpg', img)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

四、图像除法

图像除法是将两幅图像的对应像素值相除,生成一幅新的图像。在 OpenCV 中,可以使用 cv2.divide() 函数来实现图像除法。作用和乘法应该是一样的

五、图像位运算

位运算是对图像的每个像素进行二进制位操作。

OpenCV 提供了 cv2.bitwise_and()、cv2.bitwise_or()、cv2.bitwise_not() 和 cv2.bitwise_xor() 函数来实现图像的位运算。

位与计算(AND)

原图AND纯白:
在这里插入图片描述
原图AND全黑:
在这里插入图片描述

位或运算(OR)

原图OR纯白:(纯白)
在这里插入图片描述
原图OR全黑:
在这里插入图片描述

位非运算(NOT)

原图NOT:
在这里插入图片描述

位异或运算(XOR)

原图ORX纯白:
在这里插入图片描述
原图ORX全黑:
在这里插入图片描述

六、图像混合

图像混合是将两幅图像按照一定的权重进行线性组合,生成一幅新的图像。

在 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


网站公告

今日签到

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