图像的算术运算

OpenCVOpenCVBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

欢迎来到这个关于使用 OpenCV-Python 进行图像算术运算的教程!在本教程中,我们将介绍加法、减法和按位运算。在本教程结束时,你将对如何使用这些基本操作来处理图像有一个扎实的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/add("Image Addition") opencv/BasicOperationsGroup -.-> opencv/add_weighted("Image Blending") opencv/BasicOperationsGroup -.-> opencv/bitwise_and("Bitwise AND") opencv/BasicOperationsGroup -.-> opencv/bitwise_not("Bitwise NOT") opencv/BasicOperationsGroup -.-> opencv/bitwise_or("Bitwise OR") opencv/BasicOperationsGroup -.-> opencv/bitwise_xor("Bitwise XOR") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/subtract("Image Subtraction") subgraph Lab Skills opencv/add -.-> lab-38502{{"图像的算术运算"}} opencv/add_weighted -.-> lab-38502{{"图像的算术运算"}} opencv/bitwise_and -.-> lab-38502{{"图像的算术运算"}} opencv/bitwise_not -.-> lab-38502{{"图像的算术运算"}} opencv/bitwise_or -.-> lab-38502{{"图像的算术运算"}} opencv/bitwise_xor -.-> lab-38502{{"图像的算术运算"}} opencv/imread -.-> lab-38502{{"图像的算术运算"}} opencv/imwrite -.-> lab-38502{{"图像的算术运算"}} opencv/subtract -.-> lab-38502{{"图像的算术运算"}} end

图像加法

图像加法是将两个图像的像素值相加的过程。在 OpenCV 中,函数 cv2.add() 用于此目的。

打开 Python Shell

在终端中打开 Python Shell

python3

加载两个图像

使用 .imread 读取目标图像。

import cv2 as cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

将图像相加

使用 .add() 来聚合上一步中读取的两个图像。

result = cv2.add(img1, img2)

保存结果

将结果写入文件。

cv2.imwrite('Image_Addition.jpg', result)

示例

生成的图像 Image_Addition.jpg 看起来像这样:

图像加法结果示例

图像混合

这也是图像加法,但为了给出混合或透明的感觉,图像被赋予不同的权重。图像按照以下等式相加:

图像混合等式图

cv.addWeighted() 将此等式应用于图像。

将图像相加

使用 .addWeighted() 将等式应用于上一步中读取的图像。

result = cv2.addWeighted(img1,0.7,img2,0.3,0)

保存结果

将结果写入文件。

cv2.imwrite('Image_Blending.jpg', result)

示例

生成的图像 Image_Blending.jpg 看起来像这样:

混合图像结果

图像减法

图像减法用于查找两个图像之间的差异。它将一个图像的像素值从另一个图像中减去。在 OpenCV 中,你可以使用 cv2.subtract() 函数。

减去图像

使用 .subtract() 将 image1 的像素值从 image2 中减去。

result = cv2.subtract(img1, img2)

保存结果

将结果写入文件。

cv2.imwrite('Image_Subtraction.jpg', result)

示例

生成的图像 Image_Subtraction.jpg 看起来像这样:

图像减法结果示例

按位运算

按位运算用于操作像素值的各个位。OpenCV 提供了诸如 cv2.bitwise_and()cv2.bitwise_or()cv2.bitwise_xor()cv2.bitwise_not() 等函数来执行按位运算。

让我们看看每个操作的示例:

按位与 (Bitwise AND)

使用 .bitwise_and() 计算两个图像中像素值的按位与。

bitwise_and = cv2.bitwise_and(img1, img2)

按位或 (Bitwise OR)

使用 .bitwise_or() 计算两个图像中像素值的按位或。

bitwise_or = cv2.bitwise_or(img1, img2)

按位异或 (Bitwise XOR)

使用 .bitwise_xor() 计算两个图像中像素值的按位异或。

bitwise_xor = cv2.bitwise_xor(img1, img2)

按位非 (Bitwise NOT)

使用 .bitwise_not() 计算一个图像中像素值的按位非。

bitwise_not_img1 = cv2.bitwise_not(img1)

保存结果

将结果写入文件。

cv2.imwrite('Bitwise_AND.jpg', bitwise_and)
cv2.imwrite('Bitwise_OR.jpg', bitwise_or)
cv2.imwrite('Bitwise_XOR.jpg', bitwise_xor)
cv2.imwrite('Bitwise_NOT_Image1.jpg', bitwise_not_img1)

示例

生成的图像看起来像这样:

  • Bitwise_AND.jpg:
按位与运算结果
  • Bitwise_OR.jpg:
按位或运算结果
  • 异或 Bitwise_XOR.jpg:
按位异或运算结果
  • Bitwise_NOT_Image1.jpg:
按位非运算结果

总结

恭喜!你现在已经学会了如何使用 OpenCV-Python 对图像执行算术运算。你已经了解了图像加法、减法和按位运算。这些基本操作对于图像处理任务非常有用,例如混合图像、检测变化以及遮蔽图像的特定区域。

继续练习并尝试不同的图像,以更好地理解这些操作的工作原理。祝你好运,编程愉快!