图片合成融合

简介: 【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接口是阿里云视觉智能开放平台的图像人脸融合,用以演示。
1124 1
如果实现图像人脸融合?
|
机器学习/深度学习 人工智能 编解码
AI人像特效之「一键生成N次元虚拟形象」
为了零成本低门槛地提供极致酷炫的人像玩法,我们提出了一套人像风格化通用框架「AI Maleonn」AI 版神笔马良,用于一键生成风格百变的人物虚拟形象,在风格上涵盖手绘、3D、日漫、艺术特效、铅笔画等多种风格,同时可以支持面向小样本的专属风格定制,利用少量目标风格图即可实现快速迁移拓展;在处理维度上,不仅适用于生成头部效果,更支持全图精细化纹理转换,兼容多人场景;在模型鲁棒性上,有效克服了多角度姿态、面部遮挡等各类复杂场景,整体稳定性大大提升。
|
自然语言处理 搜索推荐 Java
号称elastic seaech 100多倍性能的Manticore search搜索引擎有多强
号称elastic seaech 100多倍性能的Manticore search搜索引擎有多强
2143 0
|
JSON 算法 开发工具
拒绝臃肿,一个文件搞定 C# 调用阿里云短信服务发送短信
短信发送是软件开发中的一个常见功能,在国内常用于基于短信验证码的用户注册、找回密码和操作授权等场景。阿里云的短信服务在调用时需要实现一个不是那么容易的签名算法,但如果只是为了发送短信这一个功能就去引用其提供的 SDK 显得非常不经济。
1734 1
|
4月前
|
人工智能 分布式计算 DataWorks
大数据AI产品月刊-2025年7月
大数据& AI 产品技术月刊【2025年7月】,涵盖7月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
5月前
|
存储 JSON Prometheus
产品图片上传API接口
产品图片上传API是电商、内容管理系统等常用功能,支持通过HTTP请求上传图片至服务器,便于产品图像管理。本文详解其工作原理、实现步骤与最佳实践,助您快速构建高效上传功能。
460 0
|
10月前
|
人工智能 算法 Serverless
短视频创作助手 | AI剧本生成与动画创作
短视频行业的快速发展得益于移动互联网和智能手机的普及,4G、5G网络的推广使用户对视频内容的需求大增。短视频以其短小精悍、易于传播的特点迅速吸引了大量用户。平台如抖音、快手通过算法推荐和社交功能推动了用户增长和内容生态繁荣。AI剧本生成与动画创作方案则进一步降低了创作门槛,简化从剧本到视频成片的过程。该方案利用阿里云的大模型服务平台百炼、函数计算FC和对象存储OSS等产品,实现了自动化流程,涵盖故事剧本撰写、插图设计、声音合成至视频合成,极大缩短了创作周期,提高了内容产出速度。部署简单快捷,耗时约5分钟,使得非技术人员也能轻松上手,满足企业和个人创作者的需求。
|
tengine 应用服务中间件 Linux
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
943 0
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
937 0
微信H5支付--微信JS-SDK支付--点金计划
图片拼接 --全景图合成
图片拼接 --全景图合成