当前位置: 首页 > news >正文

Python+OpenCV系列:图像的运算

文章目录

      • Python+OpenCV系列:图像的加权和、覆盖
        • 1. 图像加权和(加权融合)
        • 2. 图像覆盖(区域叠加)
        • 3. 应用场景
        • 4. 总结

Python+OpenCV系列:图像的加权和、覆盖

在图像处理中,图像的加权和与覆盖是两种非常常见的操作,广泛应用于图像融合、图像叠加、目标检测、特效制作等场景。Python 和 OpenCV 提供了简单而高效的工具来进行这些操作。在本文中,我们将介绍如何通过加权和操作将两幅图像融合,并通过图像覆盖技术将一幅图像叠加到另一幅图像的特定区域。


1. 图像加权和(加权融合)

图像加权和是将两幅图像按给定的权重进行融合的一种方式。OpenCV 提供了 cv2.addWeighted() 函数来实现这一操作。该函数的基本用法是将两幅图像的像素值按指定比例进行加权组合。

函数原型:

cv2.addWeighted(src1, alpha, src2, beta, gamma)
  • src1src2:输入图像。
  • alphabeta:分别为两幅图像的权重。
  • gamma:常数值,用于调整亮度。

通过调整 alphabeta,可以控制两幅图像的混合程度,而 gamma 则用于调整整体的亮度。

示例代码:

import cv2# 读取两张图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')# 调整大小,使两张图像大小一致
img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))# 图像加权和
alpha = 0.7
beta = 0.3
gamma = 0
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)# 显示结果
cv2.imshow('Weighted Sum', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这段代码中,我们通过 cv2.addWeighted() 将两张图像按照指定的比例(alpha=0.7beta=0.3)进行加权融合。融合后的结果显示了两张图像的组合。


2. 图像覆盖(区域叠加)

图像覆盖是指将一幅图像嵌入到另一幅图像的特定区域,通常用于图像合成、标志叠加等。使用 OpenCV,通常通过按位运算和区域裁剪来实现这一功能。

思路:

  1. 将目标图像(如一个 logo)裁剪成适当的尺寸。
  2. 在源图像中选择一个区域,将裁剪后的图像覆盖在该区域。
  3. 使用按位运算(如 cv2.bitwise_and())来实现图像的结合。

示例代码:

import cv2
import numpy as np# 读取源图像和覆盖图像
background = cv2.imread('background.jpg')
logo = cv2.imread('logo.png')# 获取 logo 的大小
rows, cols, _ = logo.shape# 在背景图像中选择区域
roi = background[0:rows, 0:cols]# 创建 logo 图像的掩模
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
_, mask = cv2.threshold(logo_gray, 1, 255, cv2.THRESH_BINARY)# 按位与操作,提取背景区域
background_region = cv2.bitwise_and(roi, roi, mask=cv2.bitwise_not(mask))# 按位与操作,提取 logo 区域
logo_region = cv2.bitwise_and(logo, logo, mask=mask)# 将 logo 区域与背景区域合成
result = cv2.add(background_region, logo_region)# 将合成结果覆盖到背景图
background[0:rows, 0:cols] = result# 显示结果
cv2.imshow('Image with Logo', background)
cv2.waitKey(0)
cv2.destroyAllWindows()

在此示例中,我们通过按位运算提取背景图和 logo 图像的相应区域,并将 logo 覆盖到背景图上。使用 cv2.bitwise_and() 对两幅图像的特定区域进行合成,确保 logo 区域不被背景遮挡。


3. 应用场景
  • 图像加权和

    • 图像融合:将多张图像按权重融合,用于全景图拼接、图像增强等。
    • 视频合成:将多种视频元素按一定权重叠加,生成特效。
  • 图像覆盖

    • 标志叠加:将透明的 logo 或水印叠加到图像上。
    • 图像合成:将多个图像合成成一幅新图像,例如在场景中叠加物体。

4. 总结

图像的加权和与覆盖操作是图像处理中常见的基本方法,广泛应用于图像融合、合成和特效制作中。通过 OpenCV 提供的 cv2.addWeighted() 函数和按位运算,用户可以方便地进行图像加权合成和图像区域覆盖。掌握这些方法,可以有效提升图像处理的灵活性和创意性,应用于各类项目中。

相关文章:

Python+OpenCV系列:图像的运算

文章目录 PythonOpenCV系列:图像的加权和、覆盖1. 图像加权和(加权融合)2. 图像覆盖(区域叠加)3. 应用场景4. 总结 PythonOpenCV系列:图像的加权和、覆盖 在图像处理中,图像的加权和与覆盖是两…...

【Unity技巧】Unity项目中哪些文件不用管理(.gitignore)

Unity的项目编译后一般都比较大,动辙几个G。这里面一般我们只需要把Assets, Packages, ProjectSettings这三个文件夹进行源代码管理就可以,其他文件就可以通过下面的.gitignore来忽略掉。 .gitignore文件的内容如下: # 将此 .gitignore 文件…...

ansible 自动化运维工具(三)playbook剧本

目录 Playbook的定义 Playbook组成 Playbook命令 Playbook剧本编写格式 基本组件 Handlers处理器 tags标签 Facts组件 Register:注册变量 Debug模块 Playbook循环 With_items循环 With_dict循环(字典循环) With_nested循环&…...

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie(前缀树)No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…...

day10性能测试(2)——Jmeter

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、LoadRunner vs Jmeter 1.1 LoadRunner 1.2 Jmeter 1.3 对比小结 2、Jmeter 环境安装 2.1 安装jdk 2.2 安装Jmeter 2.3 小结 3、Jmeter 文件目录结构 4、Jmeter默认配置修改 5、Jmeter元件、组…...

Y3编辑器文档4:触发器

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…...

1. 机器学习基本知识(3)——机器学习的主要挑战

1.5 机器学习的主要挑战 1.5.1 训练数据不足 对于复杂问题而言,数据比算法更重要但中小型数据集仍然很普遍,获得额外的训练数据并不总是一件轻而易举或物美价廉的事情,所以暂时不要抛弃算法。 1.5.2 训练数据不具有代表性 采样偏差&#…...

prometheusgrafana实现监控告警

Prometheus负责集群数据的监控和采集,然后传递给grafana进行可视化,集成睿象云可实现监控报警,为了方便操作,可以通过iframe嵌套grafana到指定的页面。 文章目录 1.Grafana集成Prometheus2.iframe内嵌grafana3.监控告警 1.Grafana…...

Ubuntu防火墙管理(五)——ufw源规则解读与修改

firewalld与nftables 在 /etc/firewalld/firewalld.conf 文件中,FirewallBackend 选项用于指定 Firewalld 使用的防火墙后端实现。具体来说: nftables:这是当前的默认选项,表示 Firewalld 将使用 nftables 作为防火墙后端。nftab…...

Docker如何运行一个python脚本Hello World

Docker如何运行一个python脚本Hello World 1、编写Python的Hello World:script.py #!/usr/bin/python #_*_coding:utf-8_*_ print("Hello World") 2、Dockerfile文件 #拉取Docker环境 FROM python #设置工作目录 WORKDIR /app #将dockerfile同级文件copy到…...

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉,自动驾驶不仅推动了技术的进步,也使得未来…...

[ubuntu18.04]ubuntu18.04安装json-c操作说明

ubuntu18.04安装json-c 代码下载 rootw1804-virtual-machine:/home/w1804/tr069# git clone https://github.com/json-c/json-c.git Cloning into /opt/git/json-c... remote: Enumerating objects: 6398, done. remote: Counting objects: 100% (1067/1067), done. remote:…...

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中,主机通常通过默认网关进行网络通信。当默认网关出现故障时,网络通信会中断,影响业务连续性和稳定性。为了提高网络的可靠性和冗余性,采用虚拟路由冗余协议(VRRP)是一种…...

Linux--top系统资源命令查看--详解

top命令用法 图: top命令用法: top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。 top的使用方式: top [-d number] | top [-bnp] top参数解释: -…...

es的join是什么数据类型

在 Elasticsearch 中,parent 并不是一个独立的数据类型,而是与 join 数据类型一起使用的一个概念。join 数据类型用于在同一个索引中建立父子文档之间的关系,允许你在一个索引内表示层级结构或关联关系。通过 join 字段,你可以定义不同类型的文档(如父文档和子文档),并指…...

KV Shifting Attention Enhances Language Modeling

基本信息 📝 原文链接: https://arxiv.org/abs/2411.19574👥 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen🏷️ 关键词: KV shifting attention, induction heads, language modeling📚 分类: 机器学习, 自然语言处…...

软错误防护技术在车规MCU中应用

在大气层内,宇宙射线粒子与大气分子发生核反应生成大气中子。大气中子入射微电子器件或电路将会诱发单粒子效应(SEE),效应类型主要有单粒子翻转(SEU)、单粒子瞬态(SET)、单粒子锁定&…...

遥感图像处理二(ENVI5.6 Classic)

1 实验目的和内容 1.1 实验目的 本次上机旨在继续深入了解ENVI软件的基本使用,并对提供的实验数据进行基本的图像分割和地物分类等操作并分析结果。 1.2 实验内容 1.2.1 图像分割 对教材示例数据“C7图像分割”中的风景图、兰花图和娃娃图分别进行图像分割操作…...

经典文献阅读之--A Fast Dynamic Point Detection...(用于驾驶场景中的动态点云剔除方法)

0. 简介 现有的基于3D点的动态点检测和移除方法存在显著的时间开销,使其难以适应激光雷达-惯性测程系统。《A Fast Dynamic Point Detection Method for LiDAR-Inertial Odometry in Driving Scenarios》提出了一种基于标签一致性的动态点检测和移除方法&#xff0…...

百度搜索应适用中文域名国家标准,修复中文网址展示BUG

12月1日中文域名国家标准正式实施。该标准“明确了中文域名在编码、解析、注册、字表等方面的技术要求,适用于中文域名注册管理机构、注册服务机构、网络软硬件服务商及终端用户”。 00:23 显然,百度作为网络软硬件服务商,是包括在国家标准的…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...