Python+OpenCV系列:图像的运算

news2024/12/16 1:51:20

文章目录

      • 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() 函数和按位运算,用户可以方便地进行图像加权合成和图像区域覆盖。掌握这些方法,可以有效提升图像处理的灵活性和创意性,应用于各类项目中。

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

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

相关文章

Web day11 SpringBoot原理

目录 1.配置优先级: 2.Bean的管理: bean的作用域: 第三方bean: 方案一: 方案二: SpringBoot原理: 扫描第三方包: 方案1:ComponentScan 组件扫描 方案2&#xff1…

ECharts柱状图-柱图2,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…

VMware安装ubuntu22教程

文章目录 软件环境1、打开vmware,选择创建新的虚拟机2、选典型安装,然后点击下一步3、选择稍后安装操作系统,点击下一步4、版本选择Ubuntu 64位,点击下一步5、输入虚拟机名称和规划的安装盘符路径6、最大磁盘大小选择20G&#xff…

利用usb-cam包标定RealSense D435相机(未解决版)

一、 安装usb-cam包和标定数据包 usb_cam 包的主要作用是将 USB 摄像头的视频流转换为 ROS 可用的消息格式。 sudo apt-get install ros-melodic-usb-cam camera_calibration 包是 ROS 中用于相机标定的工具包,主要用于校准相机的内参和外参。 sudo apt-get ins…

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台,总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者,或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多,诉求也各有不同&#xff…

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程,说白了,就是期望能通过一个程序判断一张图片是否为某个物体,或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题,因此主要处理 是 与 不是 的问题,比如我的模型是判断一张图片是否为苹果…

SpringBoot集成JWT和Redis实现鉴权登录功能

目前市面上有许多鉴权框架,鉴权原理大同小异,本文简单介绍下利用JWT和Redis实现鉴权功能,算是抛砖引玉吧。 主要原理就是“令牌主动失效机制”,主要包括以下4个步骤: (1)利用拦截器LoginInterceptor实现所有接口登录拦…

初识Robot Framework测试框架

Robot Framework 是一款用 Python 编写的通用型测试框架,具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端(Web、PC、移动端)或者接口,也可以进行分布式测试执行。常用于验收测试和验收测试…

Windows安装elasticsearch、Kibana以及IK分词器

一、下载 1.下载elasticsearch 访问官网Download Elasticsearch | Elastic,下载elasticsearch 2.下载 Kibana 访问Download Kibana Free | Get Started Now | Elastic ,下载 Kibana 3. IK分词器下载 访问Gitee 极速下载/elasticsearch-analysis-ik选…

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…

PHP项目从 php5.3 版本升级到 php8.3 版本时的一些问题和解决方法记录

一个原来的项目,因为业务需要,进行了PHP版本升级,从php5.3直接升级到php8.3。变化挺大的,原程序中有很多不再兼容,在此处进行一下记录。 一、Deprecated: 显式转换问题 报错内容:Deprecated: Implicit con…

在Liunx中安装JDK、Tomcat、mysql、lrzsz、Nginx

一.软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 二.安装JDK 上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发 布包)形式来安装JDK。 在/下创建soft目录&…

LeetCode-hot100-73

https://leetcode.cn/problems/largest-rectangle-in-histogram/description/?envTypestudy-plan-v2&envIdtop-100-liked 84. 柱状图中最大的矩形 已解答 困难 相关标签 相关企业 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#x…

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

【Spark】Spark Join类型及Join实现方式

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中&#xff0c;私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性&#xff0c;从多个维度为私域流量运营提供了强有力的支持与推动&#xff0c;以下将详细阐述其在各个方面的…

【razor】echo搭配relay功能分析

echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…

Phoenix5.1.3安装

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;作为HBase主节点&#xff09;、bigdata142、bigdata143&#xff0c;已经搭建好HBase集群&#xff0c;我这边HBase版本为2.2.7另准备一台服务器&#xff0c;bigdata144&#xff0c;作为Phoenix客户…

ASP.NET Core API + MySql

环境 数据库&#xff1a; mysql8.0 后端&#xff1a; vs2022 ASP.NET Core API .net 8 前端&#xff1a; Hbuilderx bootstrap 5.3.0 jquery v3.7.1 bootstrap-table 1.23.5 创建项目 添加资源包 AutoMapper Microsoft.EntityFrameworkCore.Tools 8.0.0 Pomelo.EntityFramew…

小程序维护外包流程和费用

由于某些原因很多老板想要跟换掉小程序原来合作的开发公司&#xff0c;重新把小程序系统维护外包新的公司。小程序系统外包维护是一个涉及多个方面的过程&#xff0c;需要从需求明确、选择团队到持续优化等多个环节进行细致管理。以下就是小程序系统外包维护主要包括几个关键步…