图片合成融合

简介: 【6月更文挑战第21天】

def direct_merge(img_tags, bg_image, location):
    '''
    功能:将图像-img_tags 融合到图像-bg_image 指定位置-location
    参数:
        img_tags : ndarray
            图像数组:前景贴纸图像
        bg_image : ndarray
            图像数组:背景图像
        location : list-二位列表:元组的列表
            存储位置的坐标,比如[(226, 365), (230, 405)]
    返回值:融合后的图像
    '''
    posx = location[0]
    posy = location[1]

    img_tags_c = img_tags.copy()
    bg_img_c = bg_image.copy()

    height, width, channels = img_tags_c.shape
    height_bg, width_bg, channels_bg = bg_img_c.shape

    LeftUpLocation = [int(posy - height // 2), int(posx - width // 2)]

    if channels == 4:
        B, G, R, img_alpha = cv2.split(img_tags_c)
        for i in range(height):  # 第i行,图像垂直方向
            for j in range(width):  # 第j列,图像水平方向
                if img_alpha[i, j] == 255 and 0 < LeftUpLocation[0] + i < height_bg and 0 < LeftUpLocation[
                    1] + j < width_bg:
                    bg_img_c[LeftUpLocation[0] + i, LeftUpLocation[1] + j] = img_tags_c[i, j][:3]
    else:
        for i in range(height):
            for j in range(width):
                if img_alpha[i, j] == 255 and 0 < LeftUpLocation[0] + i < height_bg and 0 < LeftUpLocation[
                    1] + j < width_bg:
                    bg_img_c[LeftUpLocation[0] + i, LeftUpLocation[1] + j] = img_tags_c[i, j]

    return bg_img_c

函数参数解释:

  • img_tags: 前景图像的数组表示,可能是一个灰度图像(单通道)或彩色图像(三通道或四通道,如果包含透明度)。
  • bg_image: 背景图像的数组表示,通常是一个三通道的彩色图像。
  • location: 一个包含两个元组的列表,指定了前景图像左上角在背景图像中的位置。
    image.png

函数实现步骤:

  1. 复制图像数据:使用 .copy() 方法复制前景和背景图像的数据,避免在原始图像上直接修改。

  2. 获取图像尺寸:获取前景和背景图像的高度和宽度以及通道数。

  3. 计算左上角位置LeftUpLocation 计算前景图像左上角在背景图像中的实际坐标。这是通过从指定位置减去前景图像尺寸的一半得到的。

  4. 处理透明度:如果前景图像是四通道的(即包含透明度通道),则使用 cv2.split 分离出透明度通道 img_alpha。对于每个像素,如果透明度为 255(完全不透明),则执行融合操作。

  5. 融合图像:遍历前景图像的每个像素,如果该像素的透明度为 255(对于四通道图像),并且其在背景图像中的坐标有效(即在背景图像的边界内),则将前景图像的像素值复制到背景图像的相应位置。

  6. 返回结果:返回修改后的背景图像,其中已经融合了前景图像。

原理解释:

  • 图像融合:图像融合通常涉及将两个或多个图像合并为一个图像。在这个函数中,是将前景图像融合到背景图像上。
  • 坐标计算:通过计算前景图像左上角在背景图像中的位置,可以确定前景图像在背景图像上的准确位置。
  • 透明度处理:如果前景图像包含透明度信息,需要特别处理。只有当像素的透明度为完全不透明时,才将其融合到背景图像上。
  • 边界检查:在将前景图像的像素复制到背景图像之前,需要检查目标位置是否在背景图像的边界内,以避免索引越界错误。

代码改进点:

  • 代码中存在一些逻辑错误,例如 img_alpha 未定义就使用了,这可能是因为代码片段不完整或有遗漏。
  • 对于非透明图像的融合,即使前景图像只有三个通道,代码中的条件判断也是必要的,以确保像素复制不会超出背景图像的边界。

使用场景:

这种类型的图像融合常用于图像编辑、用户界面设计、游戏开发等领域,其中需要将元素(如图标、标签或其他图像)放置到特定位置的场景。

目录
相关文章
|
编解码 数据可视化 API
如果实现图像人脸融合?
本文介绍的API接口是阿里云视觉智能开放平台的图像人脸融合,用以演示。
1194 1
如果实现图像人脸融合?
|
JSON 算法 开发工具
拒绝臃肿,一个文件搞定 C# 调用阿里云短信服务发送短信
短信发送是软件开发中的一个常见功能,在国内常用于基于短信验证码的用户注册、找回密码和操作授权等场景。阿里云的短信服务在调用时需要实现一个不是那么容易的签名算法,但如果只是为了发送短信这一个功能就去引用其提供的 SDK 显得非常不经济。
1790 1
|
6月前
|
人工智能 编解码 搜索推荐
AI智能换背景,助力电商图片营销升级
电商产品图换背景是提升销量与品牌形象的关键。传统抠图耗时费力,AI技术则实现一键智能换背景,高效精准。本文详解燕雀光年AI全能设计、Canva、Remove.bg等十大AI工具,涵盖功能特点与选型建议,助力商家快速打造高质量、高吸引力的商品图,提升转化率与品牌价值。(238字)
641 0
|
8月前
|
人工智能 分布式计算 DataWorks
大数据AI产品月刊-2025年7月
大数据& AI 产品技术月刊【2025年7月】,涵盖7月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
11月前
|
存储 人工智能 移动开发
AppFlow —— 给您的网站或企微添加AI助手
AppFlow AI助手提供灵活配置,助您轻松实现AI工具的Web页面访问与多种集成方式(H5页面、悬浮框等)。支持自定义页面生成及样式调整,满足个性化需求。文中详细介绍了创建AI助手、模型配置、Web页面集成等步骤,并展示不同场景下的使用效果。此外,还提供了企业微信集成、模型管理和插件扩展等相关操作指引,助力高效利用AI助手提升工作体验。
1269 15
AppFlow —— 给您的网站或企微添加AI助手
|
9月前
|
存储 JSON Prometheus
产品图片上传API接口
产品图片上传API是电商、内容管理系统等常用功能,支持通过HTTP请求上传图片至服务器,便于产品图像管理。本文详解其工作原理、实现步骤与最佳实践,助您快速构建高效上传功能。
630 0
|
Java
《阿里巴巴Java开发规约》插件使用详细指南
阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件。今天就为大家详细介绍一下IDEA插件与Eclipse插件的安装使用。
18570 2
《阿里巴巴Java开发规约》插件使用详细指南
图片拼接 --全景图合成
图片拼接 --全景图合成
|
前端开发 JavaScript API
惊呆了!这些前端技巧竟然能让你的网站支持AR/VR体验!
【10月更文挑战第31天】在数字化时代,用户对网页交互体验的要求日益提高,传统二维网页已难以满足需求。本文介绍如何利用前端技术,特别是Three.js,实现AR/VR体验,提升用户满意度和网站价值。通过示例代码,展示如何创建简单的3D场景,并探讨AR/VR技术的基本原理和常用工具,帮助开发者打造沉浸式体验。
930 6
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
1330 0
微信H5支付--微信JS-SDK支付--点金计划