opencv入门到精通——图像上的算术运算

目录

目标

图像加法

图像融合

按位运算


 

目标

  • 学习图像的几种算术运算,例如加法,减法,按位运算等。

  • 您将学习以下功能:cv.addcv.addWeighted等。

图像加法

您可以通过OpenCV函数cv.add()或仅通过numpy操作res = img1 + img2添加两个图像。两个图像应具有相同的深度和类型,或者第二个图像可以只是一个标量值。

注意
OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算,而Numpy加法是模运算。

例如,考虑以下示例:

 

>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv.add(x,y) ) # 250+10 = 260 => 255
[[255]]
>>> print( x+y )          # 250+10 = 260 % 256 = 4
[4]

当添加两个图像时,它将更加可见。OpenCV功能将提供更好的结果。因此,始终最好坚持使用OpenCV功能。

图像融合

这也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉。根据以下等式添加图像:

图片

G(x)= (1 - \alpha)f_0(x)+ \alpha f_1

通过从 α 从 0→1 更改,您可以在一个图像到另一个图像之间执行很酷的过渡。

在这里,我拍摄了两个图像,将它们融合在一起。第一幅图像的权重为0.7,第二幅图像的权重为0.3。cv.addWeighted()在图像上应用以下公式。

图片

在这里γ 被视为零。

 

img1 = cv.imread('ml.png')
img2 = cv.imread('opencv-logo.png')
dst = cv.addWeighted(img1,0.7,img2,0.3,0)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()

检查以下结果:

图片

按位运算

这包括按位 AND、 ORNOT 和 XOR 操作。它们在提取图像的任何部分(我们将在后面的章节中看到)、定义和处理非矩形 ROI 等方面非常有用。 下面我们将看到一个例子,如何改变一个图像的特定区域。
我想把 OpenCV 的标志放在一个图像上面。如果我添加两个图像,它会改变颜色。如果我混合它,我得到一个透明的效果。但我希望它是不透明的。如果是一个矩形区域,我可以使用 ROI,就像我们在上一章中所做的那样。但是 OpenCV 的 logo 不是长方形的。所以你可以使用如下的按位操作来实现:

我想在图像上方放置OpenCV徽标。如果添加两个图像,它将改变颜色。如果混合它,我将获得透明效果。但我希望它不透明。如果是矩形区域,则可以像上一章一样使用ROI。但是OpenCV徽标不是矩形。因此,您可以按如下所示进行按位操作:

 

# 加载两张图片
img1 = cv.imread('messi5.jpg')
img2 = cv.imread('opencv-logo-white.png')
# 我想把logo放在左上角,所以我创建了ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# 现在创建logo的掩码,并同时创建其相反掩码
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)
# 现在将ROI中logo的区域涂黑
img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv)
# 仅从logo图像中提取logo区域
img2_fg = cv.bitwise_and(img2,img2,mask = mask)
# 将logo放入ROI并修改主图像
dst = cv.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv.imshow('res',img1)
cv.waitKey(0)
cv.destroyAllWindows()

请看下面的结果。左图显示了我们创建的mask。右图显示最终结果。为了更好地理解,显示上面代码中的所有中间映像,特别是 img1_bg 和 img2_fg。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

账号多、用户咨询量大无法及时回复?「互动管理」助力高效经营!

随着互联网行业不断向纵深发展,内容形态与营销场景也更加多元化。越来越多的品牌跑步入场,深耕社媒营销,建立多平台营销矩阵,借助社媒平台的全域态势助力品牌增长。 据云略《2023品牌新媒体矩阵营销洞察报告》显示,目前…

win11下配置visual studio 2022+PCL1.13.1

第一部分:visual studio2022 安装 vs官网网址如下:https://visualstudio.microsoft.com/zh-hans/vs/ 第一步:我们打开官网链接,按如下操作点击下载免费版本的exe文件 第二步:打开下载目录下的安装文件进行安装&#…

选择移动订货系统源码的四大原因

移动订货系统需要选择源码支持的厂家,有以下四个原因,其中第四个是比较重要的,大家点个关注点个赞,我们接着往下看。 1.可自行定制:支持源码的移动订货系统可以根据企业的具体需求进行定制开发,满足企业特定…

vue3 登录页和路由表开发

目录 应用场景/背景描述: 开发流程: 详细开发流程: 总结/分析: 背景描述 在上一篇的基础上开始开发,element-plusvue3 上一篇说道详细迁移的过程,如下: 所以我这篇开始了第一步&#xff0c…

Ubuntu20.04.2 Mate 安装后基本初始设置要点笔记

序言: 有几款Linux比较稳定而且LTS长期支持,窗口也比较干净有特色,CentOS、Ubuntu、Debian、Mint 都是挺不错的OS,因为LTS,所以不像Rolling版那样改动频发,为长期应用提供了比较好的保障。下面是 Ubuntu20…

【Filament】绘制立方体

1 前言 本文主要介绍使用 Filament 绘制彩色立方体,读者如果对 Filament 不太熟悉,请回顾以下内容。 Filament环境搭建绘制三角形绘制矩形绘制圆形 2 绘制立方体 本文项目结构如下,完整代码资源 → Filament绘制立方体。 2.1 自定义基类 为…

【计算机系统结构实验】实验5 多核编程(OpenMP编程)

5.1 实验目的 加深对多核处理器架构的理解; 掌握使用OpenMP进行多线程编程的基本方法; 学习Windows和OpenEuler环境下多核编程的过程和time命令; 5.2 实验平台 需要多核处理器的计算机和微软编程工具Visual Studio 2012。Taishan服务器&…

Mac使用Vmware Fusion虚拟机配置静态ip地址

一、设置虚拟机的网络为NAT 二、修改虚拟机的网络适配器网络 1、查看虚拟机的网卡 cd /etc/sysconfig/network-scripts#有些系统显示的是ens33,ens160等等 #不同的系统和版本,都会有所不同 #Centos8中默认是ens160,在RedHat/Centos7则为ens33 2、查看网…

封装Detours用于Python中x64函数hook

Detours 代码仓库: https://github.com/microsoft/Detours x64写一个任意地址hook要比x86麻烦的多,所以这里直接封装框架来用于x64的hook。 Detours是微软发布的一个API hook框架,同时支持x86和x64,看文档说也支持ARM和ARM64的Windows。 …

【Linux笔记】网络操作命令详细介绍

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 前言: 网络操作是Linux系统中常见的任务之一,它涵盖了测试网络连接、配置网络接口、显示网络统计信息以及远程登录和文件传…

STM32的以太网外设+PHY(LAN8720)使用详解(5):MAC及DMA配置

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 MAC及DMA配置 1.1 使能ETH时钟 stm32的ETH外设挂载在AHB1总线上,位于RCC_AHB1ENR的bit25-bit27: 相关语句如下: RCC_AHB1PeriphClockCmd(RCC_AHB1…

WPF组合控件TreeView+DataGrid之DataGrid封装-粉丝专栏

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeViewDataGrid的组合,就需要我们自己去封装实现。 我们需要的效果如图所示: 这2个图都是第三方控件自带的,并且都是收费使用。 现在我们就用原生的控件进行封装一…

Tekton

一. 概念 Tekton 官网 Github Tekton 是一种用于构建 CI/CD 管道的云原生解决方案,它由提供构建块的 Tekton Pipelines,Tekton 作为 Kubernetes 集群上的扩展安装和运行,包含一组 Kubernetes 自定义资源,这些资源定义了您可以为…

nodejs+vue+ElementUi资源互助共享平台的设计

后台:管理员功能有个人中心,用户管理,卖家管理,咨询师管理,萌宝信息管理,幼儿知识管理,保姆推荐管理,音频资源管理,二手商品管理,商品分类管理,资…

【CF闯关练习】—— 900分段

🌏博客主页:PH_modest的博客主页 🚩当前专栏:cf闯关练习 💌其他专栏: 🔴每日一题 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓…

GPTs | Actions应用案例

上篇文章说道,如何使用创建的GPTs通过API接口去获取外部的一些信息,然后把获取的外部信息返回给ChatGPT让它加工出来,回答你的问题,今天我们就来做一个通俗易懂的小案例,让大家来初步了解一下它的使用法! …

基于AE、VAE 和 VQ-VAE的图像生成

AE 是将数据映直接映射为数值code(确定的数值),主要用于图像压缩与还原VAE是先将数据映射为分布,再从分布中采样得到数值code,主要用于图像生成。AQ-VAE是在原始VAE基础上多了一步Vector Quantization矢量量化操作&…

STM32的以太网外设+PHY(LAN8720)使用详解(1):ETH和PHY介绍

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 以太网外设(ETH) 1.1 以太网外设(ETH)简介 STM32F4系列MCU内部集成了一个以太网外设(ETH),可以通过介…

DRF之引入

目录 一、web应用模式 【1】前后端混合开发 【2】前后端分离 二、API接口 三、接口测试工具:Postman 四、RESTful API规范 【1】什么是RESTful 【2】RESTful API的规范 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源&#…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说,最有效的学习方式是这样地:①阅读了教材(PMBOK6、7和敏捷),了解基本概念;②反复刷近期的PMP考试真题,查漏补缺。 为此,华研荟…