python图像处理-利用一行代码实现灰度图抠图
作者:我头秃了a 发布时间:2021-03-16 10:40:49
一行代码实现灰度图抠图
抠图是ps的最基本技能,利用python可以实现用一行代码实现灰度图抠图。
基础算法是确定图像二值化分割阈值的大津法,将图像分成背景和前景两部分,最大化背景和前景之间的类间方差。
具体理论部分可以搜索大津法了解一下,代码部分只要在调用threshold的函数中,参数选择THRESH_OTSU就可以调用大津法分割
ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
全部代码如下,将原图、直方图和分割后的图放在一起比较展示
image = cv2.imread("pictures/dajin.jpg")
#先转化为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.subplot(131), plt.imshow(image, "image")
plt.title("source image"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.hist(image.ravel(), 256)
plt.title("Histogram")
ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) #方法选择为THRESH_OTSU
plt.subplot(133), plt.imshow(th1, "gray")
plt.title("OTSU,threshold is " + str(ret1)), plt.xticks([]), plt.yticks([])
plt.show()
抠图结果如下
但是这种算法对噪音和目标大小十分敏感,背景和前景像素接近的时候分割效果并不好
Python抠图程序源码
零基础学习python, 听了若干节入门免费课,即兴写了个程序,作为练习,实现抠图。
抠图的手工操作,是在PS软件中,将图片复制新建粘贴,主体保留,周围作为背景擦除,
被擦除区域,透明格式。成功后保存成 png 格式文件备用(png格式允许存储图层,保持透明区域)。手工操作费力费时,操作不当需要返回重新擦除,并且擦除精度随操作者熟练程度各异。擦除一个人物对象的周边,熟练者也需要几分钟。
python 语言,可以方便调用第三方功能包,实现抠图目的,主体对象周边比较平滑,程序执行仅需要几秒钟,大大节约了人力和时间。
准备
抠图需要第三方功能包 removebg,安装后才可以操作。安装功能包需要在Windows 的dos 窗口,win+r 热键调出运行对话框,输入 cmd 命令,打开 dos 窗口。dos窗口输入:
pip install removebg<回车> (等待下载安装结束) os包、time 包为系统自带,无需安装。
RemoveBg函数调用,需要APIKEY 实参(可称密码),这是一个多位字符串。获取需要在 url = www.remove.bg 网站注册,获得免费APIKEY码。尴尬的是,每日仅允许处理50张图片。
程序构思
1)要求允许处理多张jpg格式图片,显示运行进度, 适当的用户交互, 转成exe发布。
2)关键代码,处理单张图片的代码仅两行:
rmbg = RemoveBg('apiKey码', '错误信息记录文件名') #56行
向网站发出获取API 调用对象的请求,返回对象
rmbg.remove_background_from_img_file('./picture/' + item) #74行
使用 rmbg 对象的方法,抠一张图。
3)检查图片存放位置(文件夹存在否, 不存在则创建文件夹并退出)
4)检查文件夹中有没有文件,没有则显示信息并退出, 有则重新建表剔除非jpg格式文件。
5)检查与处理抠图定义了多个函数,避免程序条理混乱,不易阅读
readkey()
-- 读取APIkey 码文件;founddir()
-- 检查存放图片文件的文件夹是否存在,可发出提示信息;Cutout()
-- 抠图,含检查图片文件是否存在,以及剔除非jpg格式文件,并有提示;
6)主程序段,位于最后,明确提示操作准备,交互是否继续,或取消。
7) 打包成 exe 文件(略)
完整代码截图如下,每条语句均有功能注释
1 引用有关处理包
2 定义一个函数,自附带文件读取 apikye 码值
3. 定义搜索目录的函数,返回真/假。
4 定义抠图处理的主函数
4 主程序
来源:https://blog.csdn.net/wobuchixiangcain/article/details/122323040


猜你喜欢
- PIL:使用python自带图像处理库读取出来的图片格式numpy:使用python-opencv库读取出来的图片格式tensor:pyto
- 异步 innerHTMLinnerHTML 插入节点的性能的问题,通常是我们最关注的。在回答这问题时,James Padolsey 给出了他
- HTML中使背景图片自适应浏览器大小实例详解解决办法:1、图片不够大,又background属性不能拉伸图片; 2、只能用个div,把其z-
- 说在最前不知道小伙伴们在写代码的时候有没有区分开numpy.abs和abs函数,别小看这两个函数,如果在写程序的时候正确区分使用这两个函数可
- 本文实例讲述了python基于windows平台锁定键盘输入的方法。分享给大家供大家参考。具体分析如下:pywin32中没有BlockInp
- TensorFlow 定义输入节点名称input_name: with tf.name_scope('input'): &
- 一、前言介绍xlrd:可以对xlsx、xls、xlsm文件进行读操作且效率高。xlwt:主要对xls文件进行写操作且效率高,但是不能执行xl
- 技术背景GPU的加速技术在深度学习、量子计算领域都已经被广泛的应用。其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要
- 经过了上个星期的努力学习,对处理html又有了新的发现感觉真的很不错可以说js的威力在处理html代码方面我又有所领悟了1、截取特定长度字符
- 一、表单的事件监听先介绍一下几个属性的用法1、lay-filter 事件过滤器相当于选择器,layui的专属选择器2、lay-verify
- 继上一篇中间表的数据是动态的,图表展示的数据才比较准确。这里用到一个新的模块Djcelery,安装配置步骤如下:1.安装redis==2.1
- 前言:列表框控件显示多行文本,用户可以选中一行或者多行。所有的文本只能使用一种字体,不能混合使用多种字体。1 属性常用的参数列表如下:1.1
- 编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数,那么 collatz()就打印出 number
- 看看上一篇《javascript设计模式交流(一)Singleton Pattern》本文将讨论Prototype Pattern的js实现
- 将一个列表数据写入output.xlsx的a,b,c……等sheet中import pandas as pddf1 = pd.DataFra
- 想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别
- 大家好,今天在写代码的时候,遇到了这样一种情况。我有如下所示的几个类用来存放程序配置(其实当做命名空间来用,同时感觉能够继承方便一点),im
- 一. meta方法打包好的入口index.html头部加入<META HTTP-EQUIV="pragma" CO
- numpy多维数组的创建多维数组(矩阵ndarray)ndarray的基本属性shape维度的大小ndim维度的个数dtype数据类型1.1
- 本文实例讲述了ES6新特性中的let和const命令。分享给大家供大家参考,具体如下:1. let 命令① 在js中是没有块级作用域的,va