图片合成融合

简介: 【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 未定义就使用了,这可能是因为代码片段不完整或有遗漏。
  • 对于非透明图像的融合,即使前景图像只有三个通道,代码中的条件判断也是必要的,以确保像素复制不会超出背景图像的边界。

使用场景:

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

目录
相关文章
|
6月前
|
人工智能 自然语言处理 搜索推荐
基于参考物体的AIGC图像生成技术在家居导购领域的应用
基于参考物体的AIGC图像生成技术在家居导购领域的应用
222 3
|
XML Web App开发 人工智能
SVG图像——为 PPT 增添视觉趣味/03/O365智能系列(二)
SVG图像——为 PPT 增添视觉趣味/03/O365智能系列(二)
1489 0
SVG图像——为 PPT 增添视觉趣味/03/O365智能系列(二)
|
2月前
|
机器学习/深度学习 人工智能 编解码
AI图像放大工具,图片放大无所不能
AI图像放大工具,如ESRGAN,对于提高由Stable Diffusion生成的AI图像质量至关重要。它们被广泛使用,以至于许多Stable Diffusion的图形用户界面(GUI)都内置了支持。
AI图像放大工具,图片放大无所不能
|
3月前
|
数据可视化 数据管理 vr&ar
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
趋势来袭!大模型时代的文档图像发展与图像安全剖析
趋势来袭!大模型时代的文档图像发展与图像安全剖析
63 1
|
6月前
|
人工智能 搜索推荐 vr&ar
开源单图生成3D模型TripoSR的未来发展方向
【2月更文挑战第27天】开源单图生成3D模型TripoSR的未来发展方向
147 2
开源单图生成3D模型TripoSR的未来发展方向
|
6月前
|
物联网 Python
最近被layerdiffusion分层生成透明图像技术刷屏了!
最近被layerdiffusion分层生成透明图像技术刷屏了!
209 1
|
6月前
|
计算机视觉
图像数字化
图像数字化是将连续的图像信号转换为离散的数字信号的过程。在OpenCV中,您可以使用诸如imread()、imshow()、cvtColor()等函数来读取图像、显示图像和转换图像色彩空间。
81 1
|
6月前
|
存储 数据采集 人工智能
深度探索Aidlux智慧教育中的图像版面分析应用实践
本文详细描述了智慧教育领域的版面分析应用的人工智能训练营项目。项目的目标是构建一个高效的文档图像处理系统,实现文档对象识别和分类,并探索了组卷、以题搜题、文档电子化存储、结构化解析等功能。通过训练模型、实践应用和模型部署验证,分享了在该项目中所获得的见解和心得。
149 0
|
机器学习/深度学习 存储 人工智能
【技术新趋势】面向图像文档的版面智能分析与理解
在OCR系统中,纸质文档被相机拍摄成文档图像后,首先要进行版面分析、版面理解,之后才能正式数字化为电子文档。本篇文章将关注面向文档图像的版面分析与理解方向,并讨论这些任务的目前的优秀技术和方法。
【技术新趋势】面向图像文档的版面智能分析与理解