白色背景的去除比较简单,直接比较RGB颜色就可以了。但是单色背景直接用RGB比较可能存在一些问题。这就涉及到近似颜色判断的问题。

  1. 颜色定义
    我们最常见到的颜色定义是RGB模式。RGB分别代表红色、绿色和蓝色。三种颜色混合在一起,就可以表示多种颜色。这种方法有一个很大的问题,当一个分量发生改变的时候,很可能颜色也发生了改变。用RGB来直接判断颜色近似程度是非常困难的。如果要实现,估计也是非常复杂的。

除了RGB,还有两种颜色表示方法:HSV和LAB。
HSV也是三个分类,H表示色调,S表示饱和度,V表示亮度。HSV的定义与描述大家可以在网络上找。很多Python关于图形处理的软件包都要RGB与HSV之间转换的方法。

另外一种方法叫LAB方法,此方法是基于人类眼睛对于颜色的感知。L表示亮度,A表示红绿色差,B表示蓝黄色差。
此种方法可以比较方便的表示颜色的近似程度。具体的方法可以参考颜色近似度判断方法




上面为三种颜色表示方法的说明。可以发现RGB是个立方体,HSV是个圆柱,而LAB是球状模型。球状模型是最好计算颜色近似程度。立方体和圆柱体都不是特别好计算,特别是立方体。
2. 近似颜色
近似颜色的三分实现如下:

def color_dist_2(color1, color2):r1, g1, b1 = color1[0:3]r2, g2, b2 = color2[0:3]rmean = (r1 + r2) / 2R = r1 - r2G = g1 - g2B = b1 - b2return math.sqrt((2. + rmean / 256.) * (R ** 2.) + 4. * (G ** 2.) + (2. + (255 - rmean) / 256) * (B ** 2))

这个方法就是上面的参考链接中提供的。不过在实践中可以使用下面这个函数,它的运算效率大概比上一种方法高20%左右:

def color_dist(color1, color2):r1, g1, b1 = color1[0:3]r2, g2, b2 = color2[0:3]rmean = int((r1 + r2) / 2)R = r1 - r2G = g1 - g2B = b1 - b2return math.sqrt((((512+rmean)*R*R)>>8) + 4*G*G + (((767-rmean)*B*B)>>8))

有了计算颜色近似度的算法,就好实现去除单一背景色了。程序如下:

from PIL import Image
import mathdef color_dist_2(color1, color2):r1, g1, b1 = color1[0:3]r2, g2, b2 = color2[0:3]rmean = (r1 + r2) / 2R = r1 - r2G = g1 - g2B = b1 - b2return math.sqrt((2. + rmean / 256.) * (R ** 2.) + 4. * (G ** 2.) + (2. + (255 - rmean) / 256) * (B ** 2))def color_dist(color1, color2):r1, g1, b1 = color1[0:3]r2, g2, b2 = color2[0:3]rmean = int((r1 + r2) / 2)R = r1 - r2G = g1 - g2B = b1 - b2return math.sqrt((((512+rmean)*R*R)>>8) + 4*G*G + (((767-rmean)*B*B)>>8))imgPath = "d:\\green.jpg"
img = Image.open(imgPath)  # 读取照片
img = img.convert('RGBA')
width = img.size[0]
height = img.size[1]
color = [255, 255, 255]  # 白色阈值
pixel = img.load()
color_delta = 150. # 2个颜色之间的差距。可以动态调整for i in range(0, width):for j in range(0, height):data = list(pixel[i, j])if color_dist_2(data, color) < color_delta:img.putpixel((i, j), (0, 0, 0, 0))
img.show()

这里面最难的就是定义颜色近似度的范围。需要各位根据实际图片的情况进行设置。不过针对单一颜色,一般在256以内问题都不大。

【图片来自于https://blog.csdn.net/wsp_1138886114/article/details/80660014】

Python 去除单色背景相关推荐

  1. 用Python去除扫描型PDF中的水印

    内容概述 含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印. 处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充 ...

  2. python去除php、java、js、html、vue等类型注释字符方法实例

    本篇文章主要讲解:python去除php.java.js.html.vue等所类型注释字符方法实例 作者:任聪聪 可以处理php.java.python.js.html.vue.node.mysql等 ...

  3. python运行界面黑色_selenium+python 去除启动的黑色cmd窗口方法

    其实 selenium启动窗口的时候就是 使用了subprocess.Popen 启动的驱动程序的,只要在启动的时候加上启动不显示窗口的参数即可. 下面魔改开始O(∩_∩)O哈哈~ 修改代码 位于D: ...

  4. python黑色背景白色背景_用Python去除图像的黑色或白色背景实例

    用Python去除背景,得到有效的图像 此目的是为了放入深度学习计算中来减少计算量,同时突出特征,原图像为下图,命名为1.jpg,在此去除白色背景,黑色背景同理 需要对原图像进行的处理是去掉白色背景, ...

  5. python去除字符串中表情字符

    python去除字符串中表情字符 用mysql存储数据时,"charset=utf8"默认状态下text字段不支持4字节的字符,而表情字符为4字节,如果表情字符非所需数据时可以将其 ...

  6. python去除空行_python中去掉空行的问题

    在python中处理空行时,经常会遇到一些问题.现总结经验如下: 1.遇到的空行如果只有换行符,直接使用=='\n'或者 len(line)==line.count('\n') 2.有多个空格+换行符 ...

  7. 用Python去除图像的黑色或白色背景

    用Python去除背景,得到有效的图像 此目的是为了放入深度学习计算中来减少计算量,同时突出特征,原图像为下图,命名为1.jpg,在此去除白色背景,黑色背景同理 需要对原图像进行的处理是去掉白色背景, ...

  8. Python 去除图片中多种颜色或者单一颜色

    Python 去除图片的多种颜色,黑色除外(黑色为单一颜色,可以参考去除单一颜色进行识别,统计占比等等),代码如下: import cv2image = cv2.imread("D:\\CS ...

  9. 用Python去除PDF水印尝试

    文章目录 前言 一.PDF文件 二.思路整理 1.分割图片 2.去除水印 3.替换图片 三.实现效果 四.代码实现 总结 前言 最近在下载PDF书籍的时候,发现有些PDF有水印,于是就寻思着能不能用P ...

  10. 用 Python 去除 PDF 水印,你学会吗?

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据 ...

最新文章

  1. svn教程----示例二:测试人员拥有读权限
  2. 【图】一只Android开发程序猿对IMの所有痴情,你会懂?
  3. 使用selenium爬取某东的手机商品信息
  4. springboot hibernate 缓存不更新_spring boot 整合 ehcache
  5. 【MySQL】数据库事务处理---MySQL
  6. vc++2010注册表修改
  7. 固定资产管理系统如何解决企业固定资产管理混乱的问题?
  8. word如何导出PDF格式
  9. poe工业以太网交换机可以当普通交换机用吗,poe工业以太网交换机有哪些优势
  10. jmeter 导入java,JMeter导入自定义的Jar包的详解教程
  11. 基于java斗地主_码云推荐开源项目丨 用 Java 写了一个控制台玩的斗地主
  12. linux chmod 777 dev,linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思
  13. Cisco Packet Tracer的基本应用
  14. 什么是方法的重载?(Java)
  15. 并行多核体系结构基础 Yan Solihin 第4章 针对链式数据结构的并行 摘录
  16. 如何发现「将死」的ReLu?可视化工具TensorBoard助你一臂之力
  17. 支持手机,滑动拖动验证
  18. Facebook创始人解释为何不把公司交给职业经理
  19. 佛说:有人伤害你,是来渡你的
  20. 云深处科技推出国内首款IP66工业级防水机器狗“绝影X20”

热门文章

  1. 【智能控制】linkboy带你花式开灯
  2. 开灯问题 算法竞赛 (注释详细)
  3. 超级牛的网站同步工具软件—端端Clouduolc
  4. 手机网页点击按钮给指定号码发送短信
  5. 物联网芯片+区块链底层融合:紫光展锐开创产业升级新思路
  6. 正则表达式实现与或非
  7. 工作汇报计时器小工具介绍
  8. 常见的几个接口管理平台简介
  9. 小程序之视频卡顿问题
  10. 【Mac使用技巧】Mac的VMware虚拟机系统时间如何调成不同步