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图像处理-利用一行代码实现灰度图抠图

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 引用有关处理包

python图像处理-利用一行代码实现灰度图抠图

2 定义一个函数,自附带文件读取 apikye 码值

python图像处理-利用一行代码实现灰度图抠图

3. 定义搜索目录的函数,返回真/假。

python图像处理-利用一行代码实现灰度图抠图

4 定义抠图处理的主函数

python图像处理-利用一行代码实现灰度图抠图

4 主程序

python图像处理-利用一行代码实现灰度图抠图

来源:https://blog.csdn.net/wobuchixiangcain/article/details/122323040

标签:python,图像处理,灰度图,抠图
0
投稿

猜你喜欢

  • 删除PHP数组中头部、尾部、任意元素的实现代码

    2023-06-14 12:40:44
  • python3操作微信itchat实现发送图片

    2022-03-26 11:42:52
  • 改善IE6中a与a:hover的背景支持

    2009-11-27 18:50:00
  • python实现多线程暴力破解登陆路由器功能代码分享

    2023-08-28 21:27:01
  • python 爬取腾讯视频评论的实现步骤

    2021-06-19 03:57:58
  • pandas计算最大连续间隔的方法

    2022-05-23 12:05:21
  • 基于PyQt5制作一个windows通知管理器

    2022-10-18 19:28:24
  • 各浏览器 CSS Hack 整理

    2008-01-17 10:54:00
  • 利用Python编写简易的录制屏幕小工具

    2023-12-17 04:34:57
  • Php中文件下载功能实现超详细流程分析

    2023-10-07 17:09:13
  • PHPCMS的使用小结

    2023-11-20 20:19:47
  • python实现在函数中修改变量值的方法

    2023-12-15 04:15:02
  • 详解php实现页面静态化原理

    2023-10-25 10:58:10
  • 修炼设计能力的土办法

    2008-07-16 10:34:00
  • Sub-Pixel Bug?!

    2010-03-24 18:09:00
  • 浅谈Python中带_的变量或函数命名

    2023-08-30 15:44:08
  • Tensorflow 实现分批量读取数据

    2023-09-23 23:04:44
  • 简单介绍Python中用于求最小值的min()方法

    2021-05-27 23:00:11
  • python操作mongodb根据_id查询数据的实现方法

    2023-04-04 23:12:28
  • firefox通过XUL实现text-overflow:ellipsis的效果

    2008-07-08 19:12:00
  • asp之家 网络编程 m.aspxhome.com