opencv实现抠图(单一背景),替换背景图

2023-11-06

下面简单图片演示一下:

提取mask:

===>

替换背景:

 + =

 

python的opencv代码如下:

 

# coding=utf-8

import cv2
import  numpy as np

img=cv2.imread('lp.jpg')
img_back=cv2.imread('back.jpg')
#日常缩放
rows,cols,channels = img_back.shape
img_back=cv2.resize(img_back,None,fx=0.7,fy=0.7)
cv2.imshow('img_back',img_back)

rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.4,fy=0.4)
cv2.imshow('img',img)
rows,cols,channels = img.shape#rows,cols最后一定要是前景图片的,后面遍历图片需要用到

#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#获取mask
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)

#腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)

#遍历替换
center=[50,50]#在新背景图片中的位置
for i in range(rows):
    for j in range(cols):
        if dilate[i,j]==0:#0代表黑色的点
            img_back[center[0]+i,center[1]+j]=img[i,j]#此处替换颜色,为BGR通道
cv2.imshow('res',img_back)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

批量测试代码:



import os
import sys
import cv2
import numpy as np 


# 遍历文件夹
def walk_file(file):
    for root, dirs, files in os.walk(file):

        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名list
        # files 表示该文件夹下的文件list
        img_files = []
        # 遍历文件
        for f in files:
            # print(os.path.join(root, f))
            img_files.append( os.path.join(root, f) )

        # 遍历所有的文件夹
        #for d in dirs:
        #    print(os.path.join(root, d))

        return img_files


def matting(img_file, img_back_file='./back.png'):
    img=cv2.imread( img_file )
    #日常缩放
    # rows,cols,channels = img_back.shape
    # img_back=cv2.resize(img_back,None,fx=0.7,fy=0.7)
    #cv2.imshow('img_back',img_back)
 
    rows,cols,channels = img.shape
    # img=cv2.resize(img,None,fx=0.5,fy=0.5)
    #cv2.imshow('img',img)
    rows,cols,channels = img.shape#rows,cols最后一定要是前景图片的,后面遍历图片需要用到
    print ('>>>>>', rows,cols)
    img_back=np.ones([rows,cols,3]) * 255 #cv2.imread( img_back_file )
 
    #转换hsv
    hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    #获取mask
    lower_blue=np.array([0,0,0])
    upper_blue=np.array([50,100,255])
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    #cv2.imshow('Mask', mask)
 
    #腐蚀膨胀
    erode=cv2.erode(mask,None,iterations=1)
    #cv2.imshow('erode',erode)
    dilate=cv2.dilate(erode,None,iterations=1)
    #cv2.imshow('dilate',dilate)
 
    #遍历替换
    center=[0,0]#在新背景图片中的位置
    for i in range(rows):
        for j in range(cols):
            if dilate[i,j]==0:#0代表黑色的点
                img_back[center[0]+i,center[1]+j]=img[i,j]#此处替换颜色,为BGR通道
    #cv2.imshow('res',img_back)
 
    #cv2.waitKey(0)
    #cv2.destroyAllWindows()
    cv2.imwrite( './res/'+img_file.split('/')[-1], img_back )




def main():
    img_files = walk_file('./imgs/')
    print( '>>>', img_files )
    for per_img in img_files:
        matting( per_img )




if __name__ == '__main__':
    main()

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv实现抠图(单一背景),替换背景图 的相关文章

  • 自学Python爬虫学到什么程度?就可以去找工作了?

    确立目标 了解需求 首先我们要先定位自己的目标 当然我们先以爬虫工程师来做个说明 去招聘网上看看需求都有哪些 直接做个拉勾网爬虫 结果了 仔细看看 我们可以得出以下几点 1 python 不是唯一可以做爬虫的 很多语言都可以 尤其是 jav
  • 苏宁图书爬虫第一版

    最近一直在忙于工作 当我知道这些都是借口 毕竟某些博主大佬深夜还在更新订阅号更新微博 或许这就是自制力的差距吧 不啰嗦了 今天要写的主要是一篇关于如何爬取 苏宁图书 当然只是半成品 但是大部分问题都已经解决 在这里记录一下发生过的问题 以免
  • 祝福所有的辛勤的“园丁”们,教师节快乐!

    祝福所有的辛勤的 园丁 们 教师节快乐
  • python自动化课程笔记(十三)单例模型、代码性能、抛出异常

    单例模型 重要 class Person object instance None is first True def new cls args kwargs 如果类属性 instance的值为None 创建一个对象 并赋值为这个对象的引用
  • python后端学习(十三)路由支持正则、Url编码、增删改操作、增加log日志

    路由支持正则 编码 增删改操作 增加log日志 mini frame py import re url编码相关 import urllib parse import logging from pymysql import connect U
  • python作业记录1_字典运用的实例

    帮朋友做了几个作业题目 记录一下 一 某人到超市购买了以下物品 先需要对货物金额进行统计 清单如下图所示 牛奶 65 面包 15 可乐 39 饼干 45 糖果 24 水果 35 8 要求 1 使用字典保存以上数据 2 可乐的金额统计出错 请
  • 最全面的Python重点知识汇总,建议收藏!

    这是一份来自于 SegmentFault 上的开发者 二十一 总结的 Python 重点 由于总结了太多的东西 所以篇幅有点长 这也是作者 缝缝补补 总结了好久的东西 Py2 VS Py3 print成为了函数 python2是关键字 不再
  • 实习总结3.1(python函数参数)

    python的函数参数 问的比较多的是 args 和 kwargs的区别 参考文章 定义 f a b c 必选参数 f a b c 0 c为默认参数 f a b c 0 args args可选参数 自动组装为tuple f a b c 0
  • Python的PyYAML模块详解

    文章目录 简介 安装 简单安装 从源码安装 最常被问到的问题 使用详解 加载YAML 转储YAML 构造 表示和解析 YAML语法 文档 块序列 块映射 流集合 标量 别名 标签 YAML标签和Python3 对象 字符串转换 名称和模块
  • 计算机二级python基础题刷题笔记(三)

    hello 看到三的小伙伴们你们已经超过30 的对手啦 接下来也要加油呀 代码没有最好 只有更好 如果你有更好的想法答案欢迎在评论区里发表呀 1 将程序里定义好的std列表里的姓名和成绩与已经定义好的模板拼成一段话 显示在屏幕里 std 张
  • python练习题3

    1 数列翻转 reverse 问题描述 编写程序对列表中的数据进行翻转转换 即将数组中第一个数和最后一个数交换 第二个数和倒数第二个数交换 依此类推 样例输入 4 100 200 300 400 样例输出 400 300 200 100 a
  • python 二叉树,先序回溯,层序队列,队列基础用法,二叉树深度

    文章目录 1 创建二叉树 先 中 后遍历 2 n个节点有多少种二叉树 递归 3 层序遍历 4 队列基础用法 五 二叉树深度 1 创建二叉树 先 中 后遍历 创建二叉树 class TreeNode def init self data le
  • python3 隐藏print的标准输出

    在使用python调用函数时 想将函数中的print输出禁止掉又不想改函数的代码 可以定义如下HiddenPrints类解决 class HiddenPrints def enter self self original stdout sy
  • UI自动化测试通过飞书发送告警信息

    1 发送纯文本消息 1 1代码如下 usr bin env python coding utf 8 import json import requests url https open feishu cn open apis bot v2
  • python基础----03-----if语句、while、for循环、range语句、continue和break

    一 布尔类型和比较运算符 1 1 布尔类型和比较运算符 定义变量存储布尔类型数据 变量名称 布尔类型字面量 布尔类型不仅可以自行定义同时也可以通过计算的来 也就是使用比较运算符进行比较运算得到布尔类型的结果 在C C 中 比较运算符称之为关
  • 递推和递归、迭代的关系简介

    递推和递归 迭代的关系简介 在编程里 递推关系可以通过递归或者迭代来实现 但是递归和迭代又不仅仅只能用来实现递推关 有更广泛的用途 递推 递归和迭代都是解决问题的方法 它们之间有一定的联系 递归和迭代可以用于实现递推关系 但它们也有各自独立
  • python处理excel数据

    文章目录 前言 一 用到的模块是什么 二 execl表格的样式 三 模块的使用 1 引入模块 2 读取excel表数据 3 将写入excel表 四 代码分析 1 代码逻辑 2 选出有用的股票号并与回报率关联 3 将全部数据按照所需要的股票号
  • 安装python包的方式,控制台方式以numpy安装为例

    说明 方式1 直接打开cmd 需要配置python环境 控制台输入 python m pip install package name 版本号 方式2 去网上将所需的包下载下来 链接 官方下载链接 一般是 whl格式 然后将其放在自己的路径
  • Python基础教程:强大的Pandas数据分析库

    Pandas是一个基于 NumPy 的非常强大的开源数据处理库 它提供了高效 灵活和丰富的数据结构和数据分析工具 当涉及到数据分析和处理时 使得数据清洗 转换 分析和可视化变得更加简单和高效 本文中 我们将学习如何使用Pandas来处理和分
  • python-测试代码

    目录 介绍 测试函数 单元测试和测试用例 可通过的测试 不能通过的测试 测试未通过时怎么办 添加新测试 测试类 各种断言方法 一个要测试的类 测试AnonymousSurvey类 方法setUp 介绍 在本章中你会学习如何使用Python模

随机推荐

  • [综述] Generative AI meets 3D: A Survey on Text-to-3D in AIGC Era

    论文 改文章是23年5月27日挂在arxiv上 本文重点关注4 1节Text Guided 3D Avatar Generation 4 4节Text Guided 3D Shape Transformation和第5章Discussion
  • 第十一届泰迪杯B题全部问题部分代码

    数据预处理 导入需要的包 import pandas as pd import numpy as np df train pd read csv 数据 order train1 csv encoding utf 8 df train df
  • 安装MySQL数据库

    登录游戏需要账号和密码 进入游戏还会创建角色 服务器需要把这些账号和角色信息保存到硬盘里 这便会涉及到数据库 MySQL是游戏开发中最常用的数据库之一 它是当前最流行的关系型数据库管理系统 MySQL是一个关系型数据库管理系统 最早由瑞典M
  • 产品设计的步骤有哪些?

    饭要一口一口吃 一口吃不成个大胖子 事情应该一个接一个地做 越是匆忙和混乱 就会产生越多的问题 今天我们来谈谈产品设计的步骤 以便更好地进行产品设计 1 市场调查 对调查内容进行深入细致的调查研究 分类分析 包括 设计对象的经营理念和未来前
  • U盘安装Centos 7系统

    开始安装 一 制作U盘启动盘 参考 http jingyan baidu com article a378c960630e61b329283045 html 1 安装UltraISO 2 安装完成后点击 试用 3 点击文件 选择打开 4 找
  • Android Studio快捷开发(常用快捷键)

    本文记录自己常用的快捷开发操作 会持续更新 慢慢补 1 鼠标左键双击选中所点击的部分 2 在句末鼠标左键双击选中该句 3 在 大括号前后鼠标左键双击选中该 大括号包裹的代码段 xml文件中在 lt gt 前后双击也可以选择代码段 4 鼠标点
  • c语言显示器编程,VC实现Windows多显示器编程的方法

    本文实例讲述了VC实现Windows多显示器编程的方法 分享给大家供大家参考 具体如下 一 Windows中接入多个显示器时 可设置为复制和扩展屏 1 设置为复制屏幕时 多个显示器的分辨率是一样的 位置为0 分辨率值 2 设置为扩展屏幕时
  • ubuntu安装redis

    可以自己下载安装包 然后上传到服务器上 或者直接下载 wget c http download redis io releases redis 5 0 7 tar gz 解压 tar zxvf redis 5 0 7 tar gz 进入re
  • Windows 下OpenSSL安装过程及错误解决办法

    Windows下使用OpenSSL有两种方式 一 直接下载别人编译好的安装包 http slproweb com products Win32OpenSSL html 二 自己编译安装 1 下载并安装perl http www active
  • Error: getaddrinfo ENOTFOUND localhost

    根据报错内容 推断是localhost的问题 有可能是localhost没有绑定127 0 0 1 我就当是localhost没有绑定127 0 0 1 1 打开hosts文件 终端执行 sudo vim etc hosts 打开hosts
  • 笔记本gtx1650最好用驱动_各型号笔记本显卡定位

    笔记本显卡目前主要有三大阵营 分别是NVIDA显卡 AMD显卡以及Intel处理器内置的核心显卡 其中NVIDA显卡在笔记本领域中 占据的份额最高 其次是AMD笔记本显卡 最后是Intel处理器内置的核心显卡 显卡主要影响游戏性能表现 对于
  • java的封装继承和多态

    封装 继承和多态 封裝 定义 面向对象编程语言 需要对现实世界中的事物进行抽象 模拟 现实世界中的对象属性 都是隐藏 在对象内部的 外界无法直接操作和修改 在类中定义属性的时候 一般需要把属性隐藏起来 如果外界需要访问这个属性 那么就需要提
  • 【自然语言处理】主题建模评估:连贯性分数(Coherence Score)

    主题建模评估 连贯性分数 Coherence Score 1 主题连贯性分数 主题连贯性分数 Coherence Score 是一种客观的衡量标准 它基于语言学的分布假设 具有相似含义的词往往出现在相似的上下文中 如果所有或大部分单词都密切
  • 蓝桥杯 分数线

    为了鼓励大家 老师希望获奖人数不少于参赛总人数的一半 因此 老师需要确定一个获奖分数线 所有得分在分数线及以上的同学可以获奖 在满足上面条件的情况下 老师希望获奖分数线越高越好 请同学们通过程序设计的方法来解决以上问题 确定获奖分数线和总获
  • Python趣味编程3则:李白买酒、猴子吃桃、宝塔上的琉璃灯

    1 李白买酒 问题描述 李白街上走 提壶去买酒 遇店加一倍 见花喝一斗 店不相邻开 花不成双长 三遇店和花 喝光壶中酒 请问此壶中 原有多少酒 简单分析 题目中加一倍是指再购买和壶中酒同样数量的酒 喝一斗是指喝掉壶中的一斗酒 根据描述 李白
  • 如何用vmware虚拟服务器,虚拟机怎么用,手把手教你vmware虚拟机怎么用

    VM虚拟机的使用对于一个计算机专业的人来说是十分重要的 虚拟机是一个很实用的软件 因为我们可以在虚拟机里面测试一些软件的稳定性 并且虚拟机可以安装好几种系统 操作也很方便 哪款虚拟机好用呢 下面 小编给大家带来了vmware虚拟机的使用方法
  • 计算机视觉项目:手势拖拽方块和手势控制音量

    项目简介 电子科技大学中山学院2019级计算机视觉的课程设计 语言 Python 开发工具 Pycharm Python3 9 库 PyQt OpenCv mediapipe 功能 手势拖拽方块 通过食指与中指的距离控制方块移动 手势控制音
  • vue实现pdf打印预览

    vue实现pdf打印预览 前言 前端调用后端接口 返回给前端的是文件流 而不直接是路径 这时前端需把文件流转成路径 再使用window open 方法 打开pdf实现预览打印 代码如下 注 res是后端返回的文件流 if window na
  • ntko打印公章

    TANGER OCX OBJ ActiveDocument Application Selection GoTo 1 0 0 fengcheng 定位光标 AddSignFromURL sign fengcheng esp function
  • opencv实现抠图(单一背景),替换背景图

    下面简单图片演示一下 提取mask gt 替换背景 python的opencv代码如下 coding utf 8 import cv2 import numpy as np img cv2 imread lp jpg img back cv