python opencv 图像处理之图像算数运算及修改颜色空间

 更新时间:2022年08月09日 16:59:16   作者:51CTO_姜君泽​​​​​​​  
这篇文章主要介绍了python opencv 图像处理之图像算数运算及修改颜色空间,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

1.图像加法

图像加法有两种方式,一种是通过 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 opencv 图像处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现Web应用国际化i18n的示例详解

    Python实现Web应用国际化i18n的示例详解

    这篇文章主要为大家详细介绍了如何基于Python的gettext模块,实现一个灵活、可扩展的多语言支持系统,文中的示例代码讲解详细,有需要的可以参考下
    2025-02-02
  • 分享5个python提速技巧,速度瞬间提上来了

    分享5个python提速技巧,速度瞬间提上来了

    这篇文章主要给大家分享的是5个python提速技巧,工作或者学习的过程中难免会遇到卡顿问题,下面的提速技巧具有一定的参考价值,需要的小伙伴可以参考一下
    2022-01-01
  • Python之lambda匿名函数及map和filter的用法

    Python之lambda匿名函数及map和filter的用法

    今天小编就为大家分享一篇关于Python之lambda匿名函数及map和filter的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python写UI自动化之playwright(点击操作)详解

    Python写UI自动化之playwright(点击操作)详解

    这篇文章主要介绍了Playwright库中click()方法的参数及其使用场景,包括选择器、修饰键、点击位置、鼠标按钮、点击次数、延迟、超时、强制点击、试点击和不等待导航等选项,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • YOLOv5小目标切图检测的思路与方法

    YOLOv5小目标切图检测的思路与方法

    目标检测Yolo算法是非常经典且应用广泛的算法,下面这篇文章主要给大家介绍了关于YOLOv5小目标切图检测的思路与方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Python 的counter()函数解析与示例详解

    Python 的counter()函数解析与示例详解

    在 Python 中, collections 模块提供了 Counter 类,用于计算可迭代对象中元素的数量, Counter 是一个字典的子类,它以元素作为键,以元素出现的次数作为值进行计数,本文给大家介绍Python 的counter()函数,感兴趣的朋友一起看看吧
    2023-08-08
  • python numpy生成等差数列、等比数列的实例

    python numpy生成等差数列、等比数列的实例

    今天小编就为大家分享一篇python numpy生成等差数列、等比数列的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python中 Global和Nonlocal的用法详解

    Python中 Global和Nonlocal的用法详解

    global关键字用来在函数或其他局部作用域中使用全局变量, nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。这篇文章主要介绍了Python中 Global和Nonlocal的用法,需要的朋友可以参考下
    2020-01-01
  • Python PaddleNLP开源实现快递单信息抽取

    Python PaddleNLP开源实现快递单信息抽取

    这篇文章主要为大家介绍了Python PaddleNLP开源项目实现对快递单信息抽取,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python实现的HTTP并发测试完整示例

    Python实现的HTTP并发测试完整示例

    这篇文章主要介绍了Python实现的HTTP并发测试,涉及Python多线程并发操作相关实现技巧,需要的朋友可以参考下
    2015-05-05

最新评论