Python OpenCV 图像算术运算与颜色空间转换详解
本文详解 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 图像处理中的算术运算及颜色空间修改,更多相关技术内容可参考本站往期文章或继续浏览后续内容,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













