OpenCV 学习笔记(七)—— 图像的算术运算

2024-06-06 18:18

本文主要是介绍OpenCV 学习笔记(七)—— 图像的算术运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像的算术运算

  • 本节主要介绍一系列的图片的算术运算,包括图片相加,相减等。

一. 学习目标

  • 学习一系列的图片算术运算,包括图片的相加,相减,按位操作等。
  • 学习函数:cv.add(),cv.addWeighted() 等。

二. 图片相加

  • 在进行图片相加时,我们可以使用 OpenCV 的 cv.add() 函数,也可以使用 Numpy 直接进行相加:res = img1 + img2 。
  • 注意:
    • 两幅图片的深度和类型应该相同。
    • cv.add() 是一个饱和运算,而 Numpy 的加法是一个取模运算。
  • 我们看一下演示代码,来感受两者的不同:
    >>> x = np.uint8([122])
    >>> y = np.uint8([178])
    >>> print(x + y)        # 122 + 178 = 300 % 256 => 44
    [44]
    >>> print(cv.add(x, y))     # 122 + 178 = 300 => 255
    [[255]]
    

三. 图像混合

  • 图像混合也是一种图片相加,但是为了体现图片混合或是图片透明的效果,不同的图片在相加时被给予不同的权重。图片混合的公式为:
    g ( x ) = ( 1 − α ) f 0 ( x ) + α f 1 ( x ) g(x) = (1 - \alpha)f_0(x) + \alpha f_1(x) g(x)=(1α)f0(x)+αf1(x)
  • 通过从 0 → \rightarrow 1改变 α \alpha α ,可以从一个图像到另一个图像之间执行冷转换。
  • 下面我就通过一个简单的代码,来实现图片混合:
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt# 读取图片
    img1 = cv.imread("./test_image/boat.bmp")
    img2 = cv.imread("./test_image/dollar.bmp")# 图片按照不同的权重进行相加
    dst = cv.addWeighted(img1, 0.8, img2, 0.2, 0)# 显示图片
    plt.subplot(131),plt.imshow(img1,'gray'),plt.title('img1')
    plt.subplot(132),plt.imshow(img2,'gray'),plt.title('img2')
    plt.subplot(133),plt.imshow(dst,'gray'),plt.title('dst')
    plt.show()cv.waitKey(0)
    cv.destroyAllWindows()
    
  • 运行结果:
    image_blend
  • 其中 cv.addWeighted() 函数的公式为:
    d s t = α ⋅ i m g 1 + β ⋅ i m g 2 + γ dst = \alpha \cdot img1 + \beta \cdot img2 + \gamma dst=αimg1+βimg2+γ

四. 按位运算

  • 按位运算包括按位与,按位或,按位非以及按位异或运算。
  • 下面我就通过一段代码,来演示怎么使用 OpenCV 的按位运算:
    import cv2 as cv
    import numpy as np# 先定义像个数,用来执行操作
    a = np.uint8([11]) # 二进制:0000 1011
    b = np.uint8([13]) # 二进制:0000 1101# 按位与
    # b'0000 1011 & b'0000 1101 = b'0000 1001 = 9
    res_and = cv.bitwise_and(a, b)  
    # 按位或
    # b'0000 1011 | b'0000 1101 = b'0000 1111 = 15
    res_or = cv.bitwise_or(a, b)
    # 按位非
    #  - b'0000 1011 = b'1111 0100 = 244
    res_not = cv.bitwise_not(a)
    # 按位异或
    # b'0000 1011 xor b'0000 1101 = b'0000 0110 = 6
    res_xor = cv.bitwise_xor(a, b)# 打印输出结果
    print("res_and is:",res_and)
    print("res_or is:",res_or)
    print("res_not is:",res_not)
    print("res_xor is:",res_xor)
    
  • 运行结果:
    bit_wise

五. 结语

  • 如果其中有不对的地方或是需要改进的地方,请指正。
  • 联系方式 email:lwl510ll@163.com 。
  • 本文到这就结束了,谢谢大家观看。

这篇关于OpenCV 学习笔记(七)—— 图像的算术运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036867

相关文章

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi