使用 Python 中的 PIL 或 OpenCV 将图像粘贴到两个给定坐标处的另一图像,并更改不透明度

2023-11-29

我有两个具有给定点的图像,每个图像一个点,需要对齐,以便结果图像是两个图像的总和,而图像 2 以 40% 的不透明度粘贴在图像 1 上。我已经采取了这个question考虑在内,但我们的情况并不完全匹配,因为图像坐标是由用户提供的,并且图像可以具有多种尺寸。

Image 1: Image 1

Image2: Image 2

Final result(desired output): Final Image

为此我尝试过img.paste()PIL 函数并替换 cv2 中图像的 numpy 数组中的值,两者都给出了远远达不到预期的结果。


我制作了两个输入图像图像魔术师像这样:

magick -size 300x400 xc:"rgb(1,204,255)" -fill red -draw "point 280,250" 1.png
magick -size 250x80  xc:"rgb(150,203,0)" -fill red -draw "point 12,25"   2.png

enter image description here enter image description here

然后运行以下代码:

#!/usr/bin/env python3
"""
Paste one image on top of another such that given points in each are coincident.
"""

from PIL import Image

# Open images and ensure RGB
im1 = Image.open('1.png').convert('RGB')
im2 = Image.open('2.png').convert('RGB')

# x,y coordinates of point in each image
p1x, p1y = 280, 250
p2x, p2y = 12, 25

# Work out how many pixels of space we need left, right, above, below common point in new image
pL = max(p1x, p2x)
pR = max(im1.width-p1x,  im2.width-p2x)
pT = max(p1y, p2y)
pB = max(im1.height-p1y, im2.height-p2y)

# Create background in solid white
bg = Image.new('RGB', (pL+pR, pT+pB),'white')
bg.save('DEBUG-bg.png')

# Paste im1 onto background
bg.paste(im1, (pL-p1x, pT-p1y))
bg.save('DEBUG-bg+im1.png')

# Make 40% opacity mask for im2
alpha = Image.new('L', (im2.width,im2.height), int(40*255/100))
alpha.save('DEBUG-alpha.png')

# Paste im2 over background with alpha
bg.paste(im2, (pL-p2x, pT-p2y), alpha)
bg.save('result.png')

结果是这样的:

enter image description here

保存以名称开头的图像的行"DEBUG-xxx.png"只是为了方便调试,可以删除。我可以轻松地查看它们全部以了解代码发生了什么,并且我可以通过删除轻松删除它们"DEBUG*png".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 中的 PIL 或 OpenCV 将图像粘贴到两个给定坐标处的另一图像,并更改不透明度 的相关文章

随机推荐

  • 我如何在不同类型之间的打字稿中使用 Array.includes

    如果 Array includes 结果类型是输入对象类型的更严格类型 它会出错 我该如何处理这个问题 这是案例的例子 索引 d ts type OddNumberType 1 3 5 7 9 type AllNumberType OddN
  • 如何使用 Visual Studio 安装程序安装可再发行组件?

    我希望让我的安装程序 Visual Studio 安装程序 安装可再发行组件 Visual C 2013 可再发行组件 x86 以防它未安装在 PC 上或为我的程序安装必要的 dll 我don t希望设置启动条件 如果可能的话 我希望可再发
  • bson.errors.InvalidDocument:键“$oid”不得以“$”开头尝试使用 pymongo 插入文档

    我想将文档从它所说的 json 文件插入到集合中bson errors InvalidDocument key oid must not start with 我该如何解决 文档示例 name Company id oid 1234as12
  • NSNotification 的麻烦

    当我的类初始化时 它会将自己添加为一堆不同 Wi Fi 通知的观察者 由于某种原因 当发生这些情况时 选择器不会运行 有任何想法吗 提前谢谢你了 id init if self sself self NSNotificationCenter
  • XMLHttpRequest POST 到 PHP

    我在管理在 JS 上向我自己的服务器发出的简单 XMLHttpRequest 的答案时遇到了一些麻烦 我有一些令人不安的答案 这是我的代码 JavaScript function callPHP var xml new XMLHttpReq
  • 停止收集函数删除因子标签

    我正在尝试使用 tidyr 中的收集函数 但它正在从分解数据中删除标签 我的数据看起来像这样 gt require tidyr gt messy data frame x rep seq 0 2 2 y runif 6 z runif 6
  • 在运行时检索 JPA 中实体的表名称的代码示例?

    我想列出我的 JPA 实体模型的所有数据库表名称 但我无法获得正确的实体类 EntityManagerFactory factory Set
  • 运行 python 生成器清理代码的最佳方法

    我正在尝试编写一个生成器函数 该函数从数据库中获取行并一次返回一行 但是 我不确定下面标记为 的清理代码是否按照我的想法执行 如果没有 将清理代码放入生成器本身并在最后一个yield语句之后执行的最佳方法是什么 我查看了捕获 StopIte
  • 绕过 NetBeans 6.5 中生成的代码的锁定?

    在 NetBeans 中 GUI Builder 生成的代码是您无法通过编辑器使用的 我知道您可以切换到设计模式并指定自定义代码 然后以这种方式间接输入编辑 但无法编辑距光标 2 行的文本是一件痛苦的事情 我可以允许在这些区域内进行编辑吗
  • 如何在CKEditor 5中启用图像上传支持?

    我将在我的项目中使用 ckeditor v5 我尝试使用图像插件 但没有找到足够的信息 如果你看到德莫here 您可以通过拖放轻松上传图像 但是 当我尝试使用下载 ballon zip 进行拖放图像时 没有任何反应 也没有错误 有没有办法在
  • 如何在 WildFly 10 中动态更改 JMS 队列 MDB 池大小

    我正在使用 WildFly 10 1 它随 Artemis 作为新的 JMS 提供程序提供 但我无法找到如何动态更改特定 MDB 的消费者线程数 我有一个队列和一个使用队列中消息的消息侦听器 MDB 现在我想动态控制域必须启动的最大消费者线
  • C# 在 VSTO 加载项中获取正在运行的 Outlook 实例

    我正在尝试在 Excel 加载项中获取 Outlook 应用程序对象 如果有正在运行的 Outlook 实例 它应该得到这一点 如果没有 它应该使用 Outlook 对象模型创建一个 这是我现在的代码 public static Outlo
  • 从Field中获取值,发送到db函数,将值返回到Field

    我有一个工作指示在马克西莫 工单应用程序具有自定义字段 FieldA 你好 FieldB 我想从中获取价值FieldA并将其传递给function在 Oracle 数据库中 CREATE OR REPLACE function hello
  • 连接被拒绝 postgres docker

    我用 spring boot spring jpa 数据制作了一个小应用程序 它连接到 dockerized postgres 实例 即使我尝试通过以下方式连接 它也工作得很好 psql 到 dockerized postgres 实例中
  • 自动选中 woocommerce 登录表单上的“记住我”框?

    如何自动选中 woocommerce 登录表单上的 记住我 框 p class form row p
  • 在 Windows XP 中将剪贴板传递给批处理

    使用 Windows XP 我想将文本 URL 复制到剪贴板 然后运行将使用该 URL 的批处理文件 我知道如果 Clip exe 漂浮在周围 则相反的情况也是可能的 我用我自己的CLIPTEXT程序 这是一个非常简单的 5 行 pasca
  • 将命令的输出存储在 Bash 变量中。输出正在运行而不是存储

    我试图将 Bash 中命令的输出存储在变量中 但不是存储输出 而是将其解释为命令并运行 那不是我想要的 tmp line awk print 1 这将运行输出awk作为命令 echo line awk print 1 这会打印出我想要存储在
  • Oreo 8.0 中的推送通知问题

    将应用程序更新到 8 1 后 未显示通知 我修复了它 现在 待处理的意图没有按预期工作 收到通知后 如果应用程序在后台 我将无法导航到该应用程序 并且如果它已关闭 则不会启动 private void sendNotify String m
  • Yaml 架构验证 powershell

    我正在与powershell yaml将我的 YAML 解析为 PowerShell 对象 目前 我在验证 YAML 架构时遇到问题 我用过这个包yaml 架构验证器对于我的 javascript 项目 我找不到任何熟悉的函数 模块来帮助我
  • 使用 Python 中的 PIL 或 OpenCV 将图像粘贴到两个给定坐标处的另一图像,并更改不透明度

    我有两个具有给定点的图像 每个图像一个点 需要对齐 以便结果图像是两个图像的总和 而图像 2 以 40 的不透明度粘贴在图像 1 上 我已经采取了这个question考虑在内 但我们的情况并不完全匹配 因为图像坐标是由用户提供的 并且图像可