当前位置: 首页 > news >正文

零成本实现商品图换背景

这个同样是图片素材处理的付费功能,这期演示如果通过技术实现给商品图换背景。
首先这是我用opencv画的背景图
在这里插入图片描述
绘制背景图的代码

import cv2
import numpy as np
import datetime
import osdef create_product_background(width=800, height=800):# 创建渐变背景(从浅灰到白色)background = np.zeros((height, width, 3), dtype=np.uint8)# 基础浅灰色背景background[:] = (240, 240, 240)# 添加垂直渐变效果for y in range(height):alpha = y / heightbackground[y, :] = background[y, :] * (1 - alpha) + np.array([255, 255, 255]) * alpha# 添加中心阴影效果(模拟产品放置区域)shadow = np.zeros((height, width), dtype=np.uint8)cv2.ellipse(shadow, (width//2, height//2), (300, 300), 0, 0, 360, 100, -1)background = cv2.addWeighted(background, 1.0, cv2.cvtColor(shadow, cv2.COLOR_GRAY2BGR), 0.3, 0)# 添加装饰性网格线(增强专业感)for i in range(0, width, 50):cv2.line(background, (i, 0), (i, height), (220, 220, 220), 1)for j in range(0, height, 50):cv2.line(background, (0, j), (width, j), (220, 220, 220), 1)return background# 保存背景图
def save_background(background, output_dir='output', prefix='product_bg'):os.makedirs(output_dir, exist_ok=True)current_time = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')output_path = os.path.join(output_dir, f'{prefix}_{current_time}.jpg')cv2.imwrite(output_path, background)print(f'背景图已保存到: {output_path}')# 使用示例
if __name__ == '__main__':bg = create_product_background()save_background(bg)
print('背景图已保存到output/product_background.jpg')

我用前面抠图程序抠好的图
在这里插入图片描述
图片合成,将抠好的商品图放到前面画的背景图中间

import os
import datetime
import cv2
import numpy as np
from PIL import Imagedef process_foreground(foreground):"""处理前景图,包括调整大小和边缘平滑"""# 调整前景图大小max_size = (500, 500)foreground.thumbnail(max_size, Image.LANCZOS)# 转换为OpenCV格式进行处理foreground_cv = np.array(foreground)if foreground.mode == 'RGBA':alpha = foreground_cv[:,:,3]alpha = cv2.GaussianBlur(alpha, (5,5), 0)foreground_cv[:,:,3] = alphaelse:foreground_cv = cv2.GaussianBlur(foreground_cv, (3,3), 0)return Image.fromarray(foreground_cv)def main():try:# 定义输入输出路径变量background_path = os.path.join('output', 'product_bg1.jpg')foreground_path = os.path.join('output', 'sku1.png')output_dir = 'output'# 获取当前时间并格式化current_time = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')output_filename = f'result_{current_time}.jpg'# 打开并验证图片background = Image.open(background_path)foreground = Image.open(foreground_path)# 处理前景图processed_foreground = process_foreground(foreground)# 合成图片background.paste(processed_foreground, (170, 150), processed_foreground)# 确保输出目录存在os.makedirs(output_dir, exist_ok=True)# 保存结果output_path = os.path.join(output_dir, output_filename)background.save(output_path)print(f'图片已保存到: {output_path}')except FileNotFoundError as e:print(f'错误: 文件未找到 - {e}')except Exception as e:print(f'错误: 处理图片时发生异常 - {e}')if __name__ == '__main__':main()

合成好的效果,商品的边缘可以进一步羽化使其看起来更自然一些。
在这里插入图片描述

http://www.dtcms.com/a/272275.html

相关文章:

  • 静态路由实验(2)
  • Vue3 深度解析:渲染器与渲染函数的奥秘
  • 【PTA数据结构 | C语言版】链式栈的3个操作
  • linux 4.14 kernel屏蔽arm arch timer的方法
  • 网络编程与自动化
  • 高亚科技签约奕源金属,助力打造高效智能化采购管理体系
  • Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
  • 在 Ubuntu 上安装和配置 Kafka
  • 下一代防火墙-终端安全防护
  • 普林斯顿大学DPPO机器人学习突破:Diffusion Policy Policy Optimization 全新优化扩散策略
  • Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解
  • OSPF协议:核心概念与配置要点解析
  • 虚拟项目[3D物体测量]
  • 从真人到数字分身:3D人脸扫描设备在高校数字人建模教学中的应用
  • 强化学习 MDP
  • Selenium 4 教程:自动化 WebDriver 管理与 Cookie 提取 || 用于解决chromedriver版本不匹配问题
  • 《PyQt6-3D:开启Python 3D开发新世界》
  • Windows Edge 播放 H.265 视频指南
  • OpenAI正准备推出一款搭载人工智能功能的网络浏览器,试图直接挑战Alphabet旗下
  • 前端面试专栏-算法篇:21. 链表、栈、队列的实现与应用
  • NAT技术(网络地址转换)
  • 【实战】使用 ELK 搭建 Spring Boot Docker 容器日志监控系统
  • OSPF实验以及核心原理全解
  • 【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知
  • HP EVA SAN 数据恢复利器:Data recovery plugin for HP StorageWorks EVA
  • 前端项目集成husky + lint-staged + commitlint
  • Web-Bench:基于web标准和框架的benchmark
  • Fiddler中文版全面评测:功能亮点、使用场景与中文网资源整合指南
  • 什么是强化学习(RL)--2
  • 如何在VMware里的飞牛OS访问主机里面图片文件夹