python学opencv|读取图像(五十一)使用修改图像像素点上BGR值实现图像覆盖效果
【1】引言
前序学习了图像的得加方法,包括使用add()函数直接叠加BGR值、使用bitwise()函数对BGR值进行按位计算叠加和使用addWeighted()函数实现图像加权叠加至少三种方法。文章链接包括且不限于:
python学opencv|读取图像(四十二)使用cv2.add()函数实现多图像叠加-CSDN博客
python学opencv|读取图像(四十九)使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客
python学opencv|读取图像(五十)使用addWeighted()函数实现图像加权叠加效果-CSDN博客
这些方式都是实现图片的整体叠加,如果有时候想实现局部覆盖,就需要新的方法,这就是本文的学习目标。
【2】可行性分析
实现局部覆盖,本质上是改变了图像局部像素点上的BGR值,所以从更改BGR值的角度,这个目标可行。
首先,引入一张图像,然后从另一个图像里截取部分图像的BGR值形成第三个图,再把第三个图盖到第一个图像上就可以。
【3】代码测试
按照前述可行性分析思路,先引入相关模块和初始图像:
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
srcx = cv.imread('srcx.png') #读取图像srcx.png
srcp = cv.imread('srcp.png') #读取图像srcp.png
rowsx,colsx,cansx=srcx.shape #读取图像属性
rowsp,colsp,cansp=srcp.shape #读取图像属性
print('srcx的图像属性为:',srcx.shape)
print('srcp的图像属性为:',srcp.shape)
代码引入了两个图像:srcx.png和srcp.png,并且对图像的基本属性进行了读取。
之后先截取第二张图像的部分像素区域:
#截取部分图像
srcp0=srcp[int(0.5*rowsp):int(0.8*rowsp),int(0.2*colsp):int(0.6*colsp),:]
rowsp0,colsp0,cansp0=srcp0.shape #读取图像属性
print('srcp0的图像属性为:',srcp0.shape)
之后用上一步截取的图像,直接覆盖到srcx.png上:
#srcx的部分像素点BGR值被srcp0覆盖
srcx[int(0.5*rowsx):int(0.5*rowsx)+rowsp0,int(0.26*colsx):int(0.26*colsx)+colsp0,:]=srcp0
这里使用的是等大的像素区域,使用截取BGR值覆盖原有BGR值。
然后直接输出图像:
#显示和保存图像
cv.imshow('srcx',srcx) #显示图像
cv.imwrite('srcx0.png',srcx) #保存图像
cv.imshow('srcp',srcp) #显示图像
cv.imshow('srcp0',srcp0) #显示图像
cv.imwrite('srcp0.png',srcp0) #保存图像cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
代码运行使用的图像有:
图1 第一张图像srcx.png
图2 第二张图像srcp.png
截取后的部分图像为:
图3 截取图像srcp.png
使用BGR覆盖后获得的叠加图像效果为:
图4 截取图像BGR覆盖叠加图像srcx0.png
由图4可见,截取图像BGR覆盖叠加第一张图像后获得的srcx0.png 相对于初始图像srcx.png,完全覆盖了部分区域。
此时获得的图像基本属性读取数据为:
图5 读取图像属性值
图5展示的图像基本属性值,给出了第一张初始图像srcx.png和第二张初始图像srcp.png的像素值,之外还给出了截取图像srcp0.png的像素值。
【4】细节说明
进行BGR值覆盖时,应注意像区域的划分:
图6 像素区域划分
如图6所示,像素区域划分过程中:
a.应保证像素其实点保持一致,如行的起始都是0.5*rows,列的起始都是0.25*cols,因为只有这样才能保证BGR覆盖的区域和截取的图像等大;
b.应确保像素值都是整数,不确定的时候就用int()强行转化。
此时的完整代码为:
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
srcx = cv.imread('srcx.png') #读取图像srcx.png
srcp = cv.imread('srcp.png') #读取图像srcp.png
rowsx,colsx,cansx=srcx.shape #读取图像属性
rowsp,colsp,cansp=srcp.shape #读取图像属性
print('srcx的图像属性为:',srcx.shape)
print('srcp的图像属性为:',srcp.shape)#截取部分图像
srcp0=srcp[int(0.5*rowsp):int(0.8*rowsp),int(0.2*colsp):int(0.6*colsp),:]
rowsp0,colsp0,cansp0=srcp0.shape #读取图像属性
print('srcp0的图像属性为:',srcp0.shape)#srcx的部分像素点BGR值被srcp0覆盖
srcx[int(0.5*rowsx):int(0.5*rowsx)+rowsp0,int(0.26*colsx):int(0.26*colsx)+colsp0,:]=srcp0#显示和保存图像
cv.imshow('srcx',srcx) #显示图像
cv.imwrite('srcx0.png',srcx) #保存图像
cv.imshow('srcp',srcp) #显示图像
cv.imshow('srcp0',srcp0) #显示图像
cv.imwrite('srcp0.png',srcp0) #保存图像cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
【5】总结
掌握了使用python+opencv使用BGR值覆盖的方式实现图像叠加效果的技巧。
相关文章:

python学opencv|读取图像(五十一)使用修改图像像素点上BGR值实现图像覆盖效果
【1】引言 前序学习了图像的得加方法,包括使用add()函数直接叠加BGR值、使用bitwise()函数对BGR值进行按位计算叠加和使用addWeighted()函数实现图像加权叠加至少三种方法。文章链接包括且不限于: python学opencv|读取图像(四十二ÿ…...
Flask数据的增删改查(CRUD)_flask删除数据自动更新
查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询,使用like,查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据,%任何数据 st…...
kamailio-ACC模块介绍【kamailio6.0. X】
Acc 模块 作者 Jiri Kuthan iptel.org jiriiptel.org Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Ramona-Elena Modroiu rosdev.ro ramonarosdev.ro 编辑 Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Sven Knoblich 1&1 Internet …...
数据库对象
数据库对象 数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类…...
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析 0 预览一 该文件功能宏定义数据结构打印宏三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件包含了一些全局定义和宏,用于 IgH EtherCAT 主站(EtherCAT Master)的实现。包括了一些超时设定、宏定义…...

2025多目标优化创新路径汇总
多目标优化是当下非常热门且有前景的方向!作为AI领域的核心技术之一,其专注于解决多个相互冲突的目标的协同优化问题,核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中,几乎处处都有它的身影。 但随着需求场景的…...

15JavaWeb——Maven高级篇
Maven高级 Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。 我们讲到 Maven 是一款构建和管理 Java 项目的工具。经过前面 10 多天 web 开发的学习,相信大家对于 Maven 这款工具的基本使用应该没什…...

使用Ollama本地化部署DeepSeek
1、Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。 Ollama …...

蓝桥杯刷题DAY1:前缀和
所谓刷题,讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了,我对你是有些失望的,进了这个营地,不是把事情做好就可以的,你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网,成为…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯项目基本介绍 🚦项…...

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...

微服务入门(go)
微服务入门(go) 和单体服务对比:里面的服务仅仅用于某个特定的业务 一、领域驱动设计(DDD) 基本概念 领域和子域 领域:有范围的界限(边界) 子域:划分的小范围 核心域…...

Baklib揭示内容中台实施最佳实践的策略与实战经验
内容概要 在当前数字化转型的浪潮中,内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统,而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导,这些实践为企业在建设高效内容中台时提供了宝…...
C++11新特性之lambda表达式
1.介绍 C11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。 2.lambda表达式用法 lambda表达式的基本用法为: [捕获列表](参数列表)->返回类型 { 函数体 …...

洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解
一、题目链接 P10289 [GESP样题 八级] 小杨的旅游 - 洛谷 二、题目大意 n个节点之间有n - 1条边,其中k个节点是传送门,任意两个传送门之间可以 以0单位地时间相互到达。问从u到v至少需要多少时间? 三、解题思路 输入不必多讲。 cin >> …...

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践
Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…...
JWT入门
一、初识JWT:新时代的身份认证方案 在分布式系统成为主流的今天,传统的Session认证方式逐渐显露出局限性。JWT(JSON Web Token)作为现代Web开发的认证新标准,凭借其无状态、跨域友好和安全性等特性,正在成为…...

Python - Quantstats量化投资策略绩效统计包 - 详解
使用Quantstats包做量化投资绩效统计的时候因为Pandas、Quantstats版本不匹配踩了一些坑;另外,Quantstats中的绩效统计指标非常全面,因此详细记录一下BUG修复方法、使用说明以及部分指标的内涵示意。 一、Quantstats安装及版本匹配问题 可以…...

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析
内容概要 在当今快速发展的商业环境中,园区管理的数字化转型显得尤为重要。在这个背景下,快鲸智慧园区管理系统应运而生,成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术,以智能化的方式解决了传统管理模式…...
【数据结构-字典树】力扣14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“dog”,“racecar…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...