Python OpenCV 图像算术运算与颜色空间转换详解

纸上星河
纸上星河
发布时间:2026-10-16| 4人浏览过
原创

本文详解 Python OpenCV 中的图像算术运算,对比 Numpy 取模加法与 OpenCV 饱和加法的差异,并讲解 addWeighted 函数实现图像融合。同时介绍 cvtColor 函数在 BGR、灰度及 HSV 颜色空间转换中的应用,附带完整代码示例。

1.图像加法

在 OpenCV 中,图像加法主要通过两种途径实现:一是直接利用 Numpy 库对两个图像数组进行相加操作,二是调用 OpenCV 提供的 add() 函数。

无论采用上述哪种方法,参与运算的两个图像必须保持相同的深度和类型,这意味着它们的尺寸及数据类型必须完全一致。

1.1Numpy加法

使用 Numpy 进行加法运算时,公式为 img = img1 + img2,随后对计算结果取模处理。

  • 若计算后的像素值小于或等于 255,则最终结果直接等于 img1 与 img2 的和。
  • 若计算后的像素值大于 255,则结果需对 255 进行取模运算。

1.2OpenCV加法

OpenCV 通过调用 add() 函数执行加法,其核心机制为饱和运算。

  • 当计算后的像素值小于或等于 255 时,结果直接等于 img1 与 img2 的和。
  • 当计算后的像素值大于 255 时,执行饱和运算,结果固定为 255。

两种加法方式的具体示例代码如下:

import cv2 as cv
# 读取图像
img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
test = img
# Numpy 加法
result1 = img + test
# OpenCV 加法
result2 = cv.add(img, test)
# 显示图像
cv.imshow("img", img)
cv.imshow("result1", result1)
cv.imshow("result2", result2)

# 等待显示
cv.waitKey()
cv.destroyAllWindows()

从结果可见,采用 Numpy 取模加法的图像整体色调偏蓝,而使用 OpenCV 饱和运算的图像整体色调更偏向白色。

2.图像融合

图像融合本质上属于图像加法的一种特殊形式,其区别在于为图像赋予不同的权重,从而产生融合或半透明的视觉效果。

  • 普通图像加法公式:img = img1 + img2
  • 图像融合公式:img = img1 * alpha + img2 * beta + gamma

实现图像融合需使用 addWeighted() 函数,具体用法如下:

dst = cv.addWeighter(img1, alpha, img2, beta, gamma)
dst = img1 * alpha + img2 * beta + gamma

其中 alpha 和 beta 为权重系数,gamma 为亮度调节量,该参数不可省略。

以下示例展示了一张地铁图片与人物图片的融合案例:

img1 = cv.imread(file, cv.IMREAD_UNCHANGED)
img1=cv.resize(img1,(1000,1000))
img2 = cv.imread(file1, cv.IMREAD_UNCHANGED)
img2=cv.resize(img2,(1000,1000))
# 图像融合
img = cv.addWeighted(img1, 0.4, img2, 0.6, 10)
# 显示图像
cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("img", img)

# 等待显示
cv.waitKey()
cv.destroyAllWindows()

注意:若两张图像像素尺寸不同,需先通过 cv.resize(img,(width,hegiht)) 将其调整为相同像素尺寸。

3.改变颜色空间

OpenCV 支持超过 150 种颜色空间转换方法,此处重点介绍两种最常用的转换:BGR 与灰度之间的转换,以及 BGR 与 HSV 之间的转换。

执行颜色空间转换使用 cvtColor(input_image, flag) 函数,其中 flag 参数指定转换类型。

常见的 flag 值包括:

# BGR 转 灰度
cv.COLOR_BGR2GRAY
# BGR 转 HSV
cv.COLOR_BGR2HSV
# BGR 转 RGB
cv.COLOR_BGR2RGB
# 灰度 转 BGR
cv.COLOR_GRAY2BGR

以下示例演示如何使用 cvtColor() 函数将图像转换为灰度图像:

import cv2 as cv
# 读取图像
img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
# 图像类型转换
result = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

# 图像展示
cv.imshow("img", img)
cv.imshow("result", result)

# 等待显示
cv.waitKey()
cv.destroyAllWindows()

本文介绍了 Python OpenCV 图像处理中的算术运算及颜色空间修改,更多相关技术内容可参考本站往期文章或继续浏览后续内容,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。