【深度学习】inpaint图像中的alpha混合图的边缘处理

news2024/11/15 18:05:51

比如原图是:
在这里插入图片描述
红圈内就是文字水印,经过inpaint后得到图和原图混合,如何处理边界呢,这个代码可以干这事:
在这里插入图片描述

越是中心就直接用inpaint图,否则就用原图,这样进行alpha混合。

import numpy as np
import cv2
import pyclipper
from shapely.geometry import Polygon


def expand_polygon_pyclipper(polygon, expand_ratio):
    polygon_shape = Polygon(polygon)
    distance = (
            polygon_shape.area * (np.power(expand_ratio, 2) - 1) / polygon_shape.length
    )
    subject = [tuple(l) for l in polygon]
    padding = pyclipper.PyclipperOffset()
    padding.AddPath(subject, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
    expanded = padding.Execute(distance)
    if expanded == []:
        expanded = np.array(expanded)
    else:
        expanded = np.array(expanded[0]).reshape(-1, 2)
    return expanded


def shrink_polygon_pyclipper(polygon, expand_ratio):
    polygon_shape = Polygon(polygon)
    distance = (
            polygon_shape.area * (np.power(expand_ratio, 2) - 1) / polygon_shape.length
    )
    subject = [tuple(l) for l in polygon]
    padding = pyclipper.PyclipperOffset()
    padding.AddPath(subject, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
    expanded = padding.Execute(-distance)
    if expanded == []:
        expanded = np.array(expanded)
    else:
        expanded = np.array(expanded[0]).reshape(-1, 2)
    return expanded


# 定义函数
def func(x):
    return 0.25 * (np.sin(x - np.pi / 2) + 1)


# 生成0到pi的10个均匀分布的点
x_values = np.linspace(0, np.pi, 11)[1:][::-1]
y_values = func(x_values) + 1
print(f"面积{len(y_values)}", y_values)
x_values = np.linspace(0, np.pi, 13)[1:]
weight_inpaint = func(x_values) * 2
print(f"权重{len(weight_inpaint)}", weight_inpaint)


def draw_heatmap(image, polygons, num_levels=10, initial_color=(255, 0, 0)):
    # 计算函数值并加上1

    # 搞个和image一样大的二维矩阵
    inpaint_image_weights = np.zeros(image.shape[:2], dtype=np.float32)

    for i in range(num_levels):
        for polygon in polygons:
            expanded_polygon = expand_polygon_pyclipper(polygon, y_values[i])
            if expanded_polygon.size > 0:
                cv2.fillPoly(inpaint_image_weights, [expanded_polygon.astype(np.int32)], weight_inpaint[i])
    # 收缩0.95区域用白色填充
    for polygon in polygons:
        for indx, shk in enumerate([0.99, 0.98]):
            expanded_polygon = shrink_polygon_pyclipper(polygon, shk)
            if expanded_polygon.size > 0:
                cv2.fillPoly(inpaint_image_weights, [expanded_polygon.astype(np.int32)], weight_inpaint[10 + indx])
    return inpaint_image_weights


if __name__ == "__main__":
    # 示例图像
    image = np.ones((200, 200, 3), dtype=np.uint8) * 255

    # 示例文本框多边形
    text_polys = [
        np.array([[50, 50], [150, 50], [150, 100], [50, 100]]),
        np.array([[60, 120], [140, 120], [140, 160], [60, 160]])
    ]

    # 生成热力等高线图
    inpaint_image_weights = draw_heatmap(image, text_polys, num_levels=10, initial_color=(255, 0, 0))
    print(inpaint_image_weights.shape)

    # plt显示图
    import matplotlib.pyplot as plt

    plt.imshow(inpaint_image_weights, cmap='hot', interpolation='nearest')
    plt.colorbar()
    plt.show()

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

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

相关文章

计算机网络技术期末复习

一. 填空 在采用电信号表达数据的系统中,数据有 数字数据 和 模拟数据 两种。域名系统DNS是一个 分布式数据库 系统。TCP/IP的网络层最重要的协议是 IP互连网协议,它可将多个网络连成一个互连网。 4. 在TCP/IP层次模型的网络层中包括的协议主要有ARP 、…

计算机毕业设计-基于Springboot的养老院管理系统-源码程序文档

项目源码,请关注❥点赞收藏并私信博主,谢谢~ 本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写,禁止任何人抄袭以及各类盈利性传播, 相关的代码部署论文ppt代码讲解答辩指导文件…

【C++】类的默认成员函数--构造,析构,拷贝,重载

文章目录 前言一、类的默认成员函数是什么?二、构造函数1.构造函数概述2.构造函数特点3.构造函数代码示例 三.析构函数1.析构函数概述2.析构函数特点3.析构函数代码示例 四.拷贝构造函数1.拷贝构造函数概述2.拷贝构造函数特点拷贝构造函数代码示例 五. 赋值运算符重…

学习008-01-03 Customize the Application UI and Behavior(自定义应用程序UI和行为)

Customize the Application UI and Behavior(自定义应用程序UI和行为) In XAF, the data model defines the database structure and UI. Changes to your entity classes affect the UI. For example, if you add a new property to an entity class, …

解决PDF文件无法打印的困扰:快速排查与修复指南

在日常工作和学习中,PDF文件因其跨平台兼容性和良好的格式保持特性而广受欢迎。然而,当我们急需打印一份重要的PDF文件时,却遇到了“PDF无法打印”的尴尬情况,这无疑会让人感到焦急。别担心,本文将为你提供一系列快速排…

摄像馆唯美结婚摄影团队网站模版源码 自适应网站源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 摄像馆唯美结婚摄影团队网站模版源码,是一款集美观性、功能性与易用性于一体的网站解决方案。该系统采用最新的前端技术栈,如HTML5、CSS3、JavaScript等,结合响应式设计理念,确保网站能够在不同尺寸的设备上&#xff08…

在 Apifox 中如何高效批量添加接口请求 Body 参数?

在使用 Apifox 进行 API 设计时,你可能会遇到需要添加大量请求参数的情况。想象一下,如果一个接口需要几十甚至上百个参数,若要在接口的「修改文档」里一个个手动添加这些参数,那未免也太麻烦了,耗时且易出错。这时候&…

Python实现人脸识别

直接上代码: import face_recognition import time from PIL import Image, ImageDraw def faceRecognition(fileName): # 加载图片image face_recognition.load_image_file(fileName)# 人脸定位beginTime time.time()face_locations face_recognition.face_lo…

Python酷库之旅-第三方库Pandas(024)

目录 一、用法精讲 61、pandas.to_numeric函数 61-1、语法 61-2、参数 61-3、功能 61-4、返回值 61-5、说明 61-6、用法 61-6-1、数据准备 61-6-2、代码示例 61-6-3、结果输出 62、pandas.to_datetime函数 62-1、语法 62-2、参数 62-3、功能 62-4、返回值 62-…

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色,有如下几点: 1.可以使用对比色,表示强调。 2.可以使用近似色,使得和谐统一。 3.最好一张ppt中,使用的颜色不超过三种主要颜色。 但我想强调…

hot100 | 十四、贪心

1-leetcode121. 买卖股票的最佳时机 注意&#xff1a; Labuladong的套路太厉害了&#xff0c;分析的很清晰状态转移方程 public int maxProfit(int[] prices) {int n prices.length;int[][] dp new int[n][2];for (int i 0; i < n; i) {if (i-1 -1){// base casedp[…

【C语言】结构体,枚举,联合超详解!!!

目录 结构体 结构体声明 结构体成员的访问 结构体自引用 结构体变量定义&#xff0c;初始化&#xff0c;传参 结构体内存对齐 位段 枚举 联合(共用体) 结构体 结构体声明 1. 概念 1. 结构体是一些值的集合&#xff0c;这些值称为成员变量。 2. 结构体的每个成员可…

基于SpringBoot+Vue的广场舞团系统(带1w+文档)

基于SpringBootVue的广场舞团系统(带1w文档) 基于SpringBootVue的广场舞团系统(带1w文档) 广场舞团&#xff0c;为用户随时随地查看广场舞团信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理广场舞团信息的方式方法&#xff0c;更提供了其他想要了解广场舞团…

Java强软弱虚引用的特点以及应用场景(面试重点)

强&#xff1a;即使OOM也不回收软&#xff1a;内存溢出前回收弱&#xff1a;只要垃圾收集就死虚&#xff1a;对垃圾收集没关系&#xff0c;只有得到通知&#xff08;插眼&#xff0c;也操作不了对象、只能看到它还活着&#xff09; 一、软引用 代码示例&#xff1a; public cl…

快手开源LivePortrait,实现表情姿态极速迁移,GitHub 6.5K Star

近日&#xff0c;快手可灵大模型团队开源了名为LivePortrait的可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。如下动图所示&#xff1a; 来自网友测试LivePortrait 来自网友测试Li…

【Linux】Linux进程揭秘:从理论到实践的深度探索之旅

目录 前言&#xff1a;操作系统简介 概念 设计目的 理解 进程&#xff1a;程序的执行之魂 进程和程序的联系与区别 描述进程-PCB 进程的标识符 进程状态 状态转换 僵尸进程 孤儿进程 前言&#xff1a;操作系统简介 概念 操作系统&#xff08;英语&#xff1a;Opera…

PyTorch高级特性与性能优化

PyTorch高级特性与性能优化 引言&#xff1a; 在深度学习项目中&#xff0c;使用正确的工具和优化策略对于实现高效和有效的模型训练至关重要。PyTorch&#xff0c;作为一个流行的深度学习框架&#xff0c;提供了一系列的高级特性和性能优化方法&#xff0c;以帮助开发者充分利…

C#实现数据采集系统-ModbusTCP查询报文分析和实现、通信实现、测试项目

ModbusTcp的应用 Modbus是工业通信协议中广泛使用的协议,大部分设备都支持。Modbus TCP是一种基于TCP/IP网络的工业通信协议,它是Modbus协议的一种变种,专门设计用于在网络上传输数据。 Modbus TCP/IP保留了Modbus串行协议的数据结构和功能特性,同时利用了TCP/IP网络的高…

​污水处理厂空气质量监测——破解恶臭难题的科技钥匙

​ ​引言 ​ ​在城市化进程中&#xff0c;污水处理厂作为净化生活与工业废水的关键设施&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着处理规模的不断扩大&#xff0c;污水处理厂的空气质量问题&#xff0c;尤其是恶臭问题&#xff0c;逐渐成为困扰周边居民和…

spark 事件总线listenerBus

事件总线基本流程 图片来源&#xff1a;https://blog.csdn.net/sinat_26781639/article/details/105012302 LiveListenerBus创建 在sparkContext初始化中创建LiveListenerBus对象。 主要变量有两个 queues&#xff1a;事件队列&#xff0c;里面存放四个队列&#xff0c;每…