OpenCv 图像的算数运算

news2024/9/22 17:19:06

1. 图像加法

函数 cv.add(img1, img2)
参数中的img1 和 img2 应该是相同的深度和类型, 或者第二个图像可以是像素值
代码示例:

>>> x = np.uint8([250])
>>> y = np.uint8([10])

>>> print(cv.add(x,y)) #250 + 10 =260 => 255
[[255]]

>>> print(x + y)
[4]

可以注意到,如果二者的和大于最大像素值255那么opencv会将其自动置为255.
合成实例:
可以发现add函数就是普通的像素值相加
在这里插入图片描述

2.图像混合

cv.addWeighted(img1, alpha, img2, 1-alpha, gama)
这也是将图像相加,但是对图像赋予不同的权重,从而给出混合感或透明感。图像按以下等式添加:
g ( x ) = ( 1 − α ) f 0 ( x ) + α f 1 ( x ) + g a m a g(x) = (1-\alpha)f_0(x)+\alpha f_1(x) + gama g(x)=(1α)f0(x)+αf1(x)+gama

  • gama: 添加到每个总和的标量,默认为0

但是这个函数也是只能用两张相同大小的图片进行混合。
代码示例:

img1= cv.imread(img1.path)
img2= cv.imread(img2.path)

dst = cv.addWeighted(img1,0.7,img2,0.3,0)

cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()

下面的代码表示将一个小的图片混合到大图片当中

# smaller img merge to bigger img
def addWeightedSmallImgToLargeImg(largeImg, alpha, smallImg, beta = 0, gamma=0.0, regionTopLeftPos=(0,0)):
    # get the img's width and hight
    bW, bH = largeImg.shape[1::-1] 
    sW, sH = smallImg.shape[1::-1]
    # 是否偏移
    x,y =  regionTopLeftPos
    if (sW>bW) or (sH>bH): # check the img is legal or not
        raise ValueError(f"img2's size {smallImg.shape[1::-1]} must less than or equal to img1's size {largeImg.shape[1::-1]}")
    else:
        if (x+sW)>bW:
            x = bW-sW
        if (y+sH)>bH:
            y = sH-bH
        destImg = np.array(largeImg)
        tmpSrcImg = destImg[y:y+sH,x:x+sW]
        tmpImg = cv.addWeighted(tmpSrcImg, alpha, smallImg, beta, gamma)
        destImg[y:y + sH, x:x + sW] = tmpImg
        return destImg
# read img and show img's shape
img1 = cv.imread(r'images\flowers.jpg')
img2 = cv.imread(r'images\flo.jpg')
print(img1.shape)
print(img2.shape)

## show the img
new_img = addWeightedSmallImgToLargeImg(img1, 0.7, img2, 0.3, regionTopLeftPos=(640,500))
cv.imshow('merge image', new_img)
cv.waitKey(0)
cv.destroyAllWindows()

效果如图:
在这里插入图片描述
主要思想来自 opencv 中文文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Winform控件数据绑定 DataBindings

目录 引言 绑定的方式 双向绑定 验证时更改数据源 立即更改数据源 单向绑定 绑定方法 属性界面选择绑定 通过代码手动绑定 绑定自定义数据类型 引言 DataBindings 的出现显然是为了解决后台数据与前端界面的同步问题,通过绑定控件属性与对象属性,解决…

Spring Cloud整合XXL-Job

目录 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 重点&#xff1a; 第一步&#xff1a; 整合pom文件&#xff0c;在Spring Cloud中添加XXL-Job的依赖 <!-- xxl-job-core --> <dependency><groupId>com.xuxueli<…

工业设备安装可视化AR互动培训降低企业成本

随着污水处理厂构筑物、设备、管阀及电器、仪表、自控等工艺设施逐步大型化、复杂化、多样化,污水厂日常运行安全检查尤为重要。通过对不同污水处理工艺运行厂家实际调研分析&#xff0c;发现开发污水厂AR远程可视化巡检系统是很多厂家的实际需求。 AR远程可视化巡检系统也被称…

JAVA—— Steam流

一、 引言 初识Stream流的作用&#xff1a; 需求&#xff1a;按照下面的要求完成集合的创建和遍历&#xff0c;创建一个集合&#xff0c;存储多个字符串元素 通过下面代码&#xff0c;显然我们清晰的看到使用Stream流更为方便&#xff0c;而使用不同的集合遍历就有些复杂。 i…

【CMIP6月、日数据】【ERA5-LAND陆面再分析数据】【全球VIPPHEN物候数据】

国际耦合模式比较计划进入新的阶段——第六阶段&#xff08;CMIP6&#xff09;&#xff0c;这将为气候变化研究领域提供更丰富的全球气候模式数据。相比于 CMIP5&#xff0c;CMIP6 模式有两个主要的特点&#xff1a;一是 CMIP6 考虑的过程更为复杂&#xff0c;很多模式实现了大…

js - typeof与instanceof类型判断的区别

1&#xff0c;typeof 描述&#xff1a;运算符返回一个字符串&#xff0c;表示操作数的类型。 常用的类型判断 console.log(typeof 42); // numberconsole.log(typeof "blubber"); // stringconsole.log(typeof true); // booleanconsole.log(…

【Linux】Linux入门学习之常用命令一

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

stable diffusion 安装教程

stable diffusion安装教程 环境准备硬件要求安装软件Python 安装安装git安装cuda工具安装工具包模型下载 生成图片成果展示 环境准备 硬件要求 1.需要拥有NVIDIA显卡&#xff0c;GT1060起&#xff0c;显存4G以上。&#xff08;已经不需要3080起&#xff0c;亲民不少&#xff0…

中文润色ai-ai原创文章生成器

在现代社会&#xff0c;每天都有大量的中文文章被发布到互联网上&#xff0c;这些文章的质量和可读性直接影响着读者的阅读体验和文章的传播效果。为了让文章更加美好&#xff0c;越来越多的人开始尝试使用中文润色ai技术。 中文润色ai是一种先进的人工智能技术&#xff0c;它能…

OA办公系统能为企业带来什么好处?

在企业办公管理软件当中&#xff0c;OA系统一直都是最受欢迎也是很多大中型企业不可或缺的管理系统。企业OA办公系统是将计算机、通信等现代化技术运用到传统办公方式&#xff0c;进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术&#xff0c;代替办公人员传…

10分钟拥有自己的Chatgpt网站(八)

文章目录 使用Vercel托管平台搭建免费Chatgpt网站前言Fork chatgpt-vercel 到自己的github把 chatgpt-vercel 托管到vercel平台注意vercel分配的域名被墙,需要我们自己去配置自己的域名:总结使用Vercel托管平台搭建免费Chatgpt网站 前言 需要有github账户,进行对开源项目进…

vue3学习六 hooks

vue3中的 hooks 它的作用&#xff0c; 有点像 vue2中的mixins 的作用 相当于是把一个功能性的一组方法&#xff0c; 封装的别的地方&#xff0c; 当每一个 component中需要用到相应的组件的时候&#xff0c; 可以很方便用引入其中来使用 举个栗子 我们有很多的页面&#xff0c…

虚拟面试系统安装使用说明

虚拟面试系统安装使用说明 虚拟面试系统是程序员参加面试的虚拟系统&#xff0c;该软件中的测试题只针对程序员设计&#xff0c;不针对其它人员。面试流程可适用于所有大众行业。 一&#xff0e;安装与卸载 1&#xff0e;安装 本软件只有安装之后&#xff0c;才能运行。 安装方…

【Golang】排查 Build constraints exclude all the go files 的几个思路

输出该问题时说明在 Go 语言的启动编译&#xff08;Build&#xff09;阶段&#xff0c;出现了编译问题&#xff0c;往往是编译配置的问题。可以通过以下思路去排查对应的错误。 一、查看 go env &#x1f636;‍&#x1f32b;️ &#xff08;1&#xff09;首先可以查看被排除的…

【iOS开发】理解OC的类,父类,元类的关系

文章目录 前言1.1 类和对象的关系2.1 类的结构体2.2对象的结构体2.2.1元类2.2.2 涉及消息转发机制2.2.3 元类也有类2.3.4 对象和Class的 isa指针 前言 在OC中&#xff0c;有对象objc&#xff0c;有类Class&#xff0c;有父类SuperClass&#xff0c;其实还有一种元类MetaClass。…

嚯——ChatGPT是很强,但也会胡说八道。。。

现在的ChatGPT确实强&#xff0c;但是也会一本正经的胡说八道&#xff0c;例如它回答“nineteen”中有12个字母、或是旗鱼是哺乳动物…… 尽管ChatGPT可以生成流畅甚至优雅的散文&#xff0c;轻松通过困扰了AI领域超过70年的图灵测试基准&#xff0c;但它也可能看起来非常愚蠢…

【设计模式】| 修炼内功 | 23种设计模式——单例模式

设计模式如同织锦之艺术&#xff0c;精心构筑&#xff0c;展示优美。 学习设计模式&#xff0c;犹如追逐清晨的曙光&#xff0c;扉页掀开了人生的新篇章。当你学会设计模式的奥秘&#xff0c;就如同走进了灯火通明的城市&#xff0c;丰富多彩的建筑&#xff0c;让你大开眼界&am…

Postman安装及入门接口测试使用步骤

前言 在软件测试行业中&#xff0c;作为一款比jemter更便捷更好用的软件测试工具&#xff0c;postman以其便捷灵活性首当其冲&#xff0c;成为当今测试行业领域使用较广泛的主流系统软件接口测试工具。今天Darren洋为大家讲解postman这款软件测试工具的下载安装及入门接口测试步…

Sentinel实现动态配置的集群流控的方法

Sentinel实现动态配置的集群流控的方法 介绍 06-cluster-embedded-8081 为什么要使用集群流控呢&#xff1f; 相对于单机流控而言&#xff0c;我们给每台机器设置单机限流阈值&#xff0c;在理想情况下整个集群的限流阈值为机器数量✖️单机阈值。不过实际情况下流量到每台…

拉绳位移传感器连接到PLC并采集数据到物联网云平台

拉绳位移传感器是一种利用绳材收卷轮周长来计量物体长度或距离的传感器设备&#xff0c;其作用就像是一把卷尺&#xff0c;通过拉绳的长度变化测出位移量&#xff0c;并转换为数字量提供到电子信息系统中&#xff0c;在建筑、水利、地质勘察、采矿、制造加工以及渔业等广泛应用…