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

目录
  • 一行代码实现灰度图抠图
  • Python抠图程序源码
    • 准备
    • 程序构思
    • 完整代码截图如下,每条语句均有功能注释

一行代码实现灰度图抠图

抠图是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 主程序

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 3行Python代码实现图像照片抠图和换底色的方法

    1.项目背景 对于不会PS的小伙伴,抠图是一个难度系数想当高的活儿,某宝照片抠图和证件照换底色均价都是5元RMB,所以今天要介绍的这款神工具,只要 3 行代码 5 秒钟就可以完成高精度抠图,甚至都不用会代码,点两下鼠标就完成了. 这里介绍Remove Image Background工具,它基于 Python.Ruby 和深度学习技术开发,通过强大的 AI 人工智能算法实现自动识别出前景主体与背景图,分分钟秒秒钟完成抠图. 这款抠图工具有两种简单方式:在线抠图和Python代码抠图,介绍如下.

  • python图片灰度化处理的几种方法

    今天在学习的时候,发现scipy.misc中的imread提取图片的方法被弃用了.太生气了! 只好使用了matplotlib.pyplot中的imread了,可是当我发现他不能直接通过True来提取灰度图片时,我崩溃了 上网查了一下,了解了灰度化处理的几种方法: 首先先解释一下,彩色图片一般是由RGB组成,其实就是3个二维数组叠加而成.我们也就能看到一些彩色图片了.当R=G=B时,彩色图片就会变成一种灰度颜色,就是我们俗称的"黑白照片".所以灰度颜色的图片其实就是一个二维数组. 灰度化

  • Python图像运算之图像点运算与灰度化处理详解

    目录 一.图像点运算概念 二.图像灰度化处理 三.基于像素操作的图像灰度化处理 1.最大值灰度处理方法 2.平均灰度处理方法 3.加权平均灰度处理方法 四.总结 一.图像点运算概念 图像点运算(Point Operation)指对于一幅输入图像,将产生一幅输出图像,输出图像的每个像素点的灰度值由输入像素点决定.点运算实际上是灰度到灰度的映射过程,通过映射变换来达到增强或者减弱图像的灰度.还可以对图像进行求灰度直方图.线性变换.非线性变换以及图像骨架的提取.它与相邻的像素之间没有运算关系,是一种简

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

    目录 一行代码实现灰度图抠图 Python抠图程序源码 准备 程序构思 完整代码截图如下,每条语句均有功能注释 一行代码实现灰度图抠图 抠图是ps的最基本技能,利用python可以实现用一行代码实现灰度图抠图. 基础算法是确定图像二值化分割阈值的大津法,将图像分成背景和前景两部分,最大化背景和前景之间的类间方差. 具体理论部分可以搜索大津法了解一下,代码部分只要在调用threshold的函数中,参数选择THRESH_OTSU就可以调用大津法分割 ret1, th1 = cv2.threshold

  • 3段Python图像处理的实用代码的分享

    目录 前言 边缘检测 将照片变成素描风格 判断形状 前言 今天给大家分析3个计算机视觉方向的Python实用代码,主要用到的库有: opencv-python numpy pillow 要是大家所配置的环境当中没有这几个模块的话,可先用pip命令下载安装: pip install opencv-python numpy pillow 边缘检测 边缘检测的基本思想就是简化图像信息,使用边缘线代表图像所携带信息,而这次我们要用到的则是Canny边缘检测算子,在Opencv当中需要调用的是cv.can

  • Python实现判断一行代码是否为注释的方法

    目前的编辑器大都可以自动检测某一行代码是否为代码行或注释行,但并不太提供代码行/注释行行数的统计,对于大量代码文件的代码行/注释行统计,就更少见一些.本篇文章试用一段Python脚本来实现这一目标,并希望可以兼容统计不同语言编写的代码. 注释符号的研究 我们先来关注常见语言的注释符号构成.一般来讲注释符号分为单行注释符和多行注释符,以Python为例,则分别为#和'''(或""").由于多行注释符会影响后续行的判断,所以在遍历各行时必须存在一个标志位multiCmtFlagI

  • Python 如何用一行代码实现for循环初始化数组

    我就废话不多说了,大家还是直接看代码吧~ # 用一行代码实现for循环初始化数组 o = 10 b = [ o + u for u in range( 10 ) ] print( b ) # 结果是 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] x = 2 y = 3 c = [ i * y + x for i in range( 10 ) ] print( c ) # 结果是 [2, 5, 8, 11, 14, 17, 20, 23, 26, 29] 补充:

  • Python库AutoTS一行代码得到最强时序基线

    时间序列问题无论是在销量预测,天气预测还是在股票预测等问题中都至关重要,而如今随着机器学习等快速发展,已经出现了非常多时间序列建模相关的工具包,今天介绍一种非常霸道的工具,融合了自动化机器学习技术开发的AutoTS. Auto TS会先对数据进行预处理,从数据中删除异常值,通过学习寻找最佳的NaN值.只需使用一行代码,就可以训练多个时间序列模型,包括ARIMA.SARIMAX.FB Prophet.VAR,并得出效果最佳的模型. AutoTS Auto TS是一个关于时间序列预测的开源Pytho

  • PHP利用一行代码删除目录下所有文件方法示例

    前言 想必很多人都会写几行甚至几十行代码使其列出所有文件变为数组进行删除,但是glob函数分分钟解决问题!下面来一起看看详细的介绍吧. glob语法说明: array glob ( string $pattern [, int $flags = 0 ] ) glob() 函数依照 libc glob() 函数使用的规则寻找所有与 pattern 匹配的文件路径,类似于一般 shells 所用的规则一样.不进行缩写扩展或参数替代.glob使用正则匹配路径功能强大. flags 有效标记有: GLO

  • Python3一行代码实现图片文字识别的示例

    自学Python3第5天,今天突发奇想,想用Python识别图片里的文字.没想到Python实现图片文字识别这么简单,只需要一行代码就能搞定 from PIL import Image import pytesseract #上面都是导包,只需要下面这一行就能实现图片文字识别 text=pytesseract.image_to_string(Image.open('denggao.jpeg'),lang='chi_sim') print(text) 我们以识别诗词为例 下面是我们要识别的图片 先

  • python中利用matplotlib读取灰度图的例子

    代码为: import matplotlib.pyplot as plt #用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 picdir = 'C:\\Users\\wyt\\Desktop\\test\\ship\\012400.jpg' img = mpimg.imread(picdir) plt.imshow(img) plt.title('Original train image') plt.show() 显示结果如下,是以热

  • 利用Python将图片批量转化成素描图的过程记录

    目录 前言 程序 Method 1 Method 2 完整代码 结果 总结 前言 正常图片转化成素描图片无非对图片像素的处理,矩阵变化而已.目前很多拍照修图App都有这一功能,核心代码不超30行.如下利用 Python 实现读取一张图片并将其转化成素描图片.至于批处理也简单,循环读取文件夹里的图片处理即可.具体代码可以去我的 GitHub下载. 程序 Method 1 def plot_sketch(origin_picture, out_picture) : a = np.asarray(Im

  • C语言实现BMP图像处理(彩色图转灰度图)

    我们知道真彩图不带调色板,每个象素用 3 个字节,表示 R.G.B 三个分量.所以处理很简单,根据 R.G.B 的值求出 Y 值后,将 R.G.B 值都赋值成 Y,写入新图即可. 在YUV 的颜色表示方法中,Y 分量的物理含义就是亮度,它含了灰度图(grayscale)的所有信息,只用 Y 分量就完全能够表示出一幅灰度图来.YUV 和RGB 之间有着如下的对应关系: 再来看看带调色板的彩色图,我们知道位图中的数据只是对应调色板中的一个索引值,我们只需要将调色板中的彩色变成灰度,形成新调色板,而位

随机推荐