用Python去除图像的黑色或白色背景实例


Posted in Python onDecember 12, 2019

用Python去除背景,得到有效的图像

此目的是为了放入深度学习计算中来减少计算量,同时突出特征,原图像为下图,命名为1.jpg,在此去除白色背景,黑色背景同理

用Python去除图像的黑色或白色背景实例

需要对原图像进行的处理是去掉白色背景,抠出有效的参与计算的图形的大小即下图

用Python去除图像的黑色或白色背景实例

对此有两个思路:

用掩模法得到有效部分,其次去掉空白,但太繁琐喽,并且一万多张图片,其不弄到天荒地老(截图也是哦)

对图像进行处理,即先做numpy变化,后反变换,将255-原图像,此时得到的图像就是

用Python去除图像的黑色或白色背景实例

在此计算图像的横轴相加为0,纵轴相加为0,删去和为0的列和行得到的numpy矩阵,用255减去numpy矩阵得到的图像就是所求有效图像。(在此我没能实现三通道的图像,只能做出灰度图的图像)程序如下:

from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.misc
img = Image.open('1.jpg')
e,g=img.size
img1=img.convert('L')
img1=np.array(img1, dtype='float32')
arr=255-img1
arr1 = arr.sum(axis=0)#每一列求和
arr2 = arr.sum(axis=1)#每一行求和
df=pd.DataFrame(arr)#把像素点转化为dataframe
df.insert(len(df.columns),len(df.columns),arr2)#最后一列插入每一行的和
df1=pd.concat([df,(pd.DataFrame(df.sum()).T)])#最后一行插入每一列的和
df2=df1[df1[e]>0]#根据最后一列把大于0的行筛选出来

#根据最后一行,把等于0的列删除掉
for c in df2.columns:
  if df2[c].sum() == 0 :
    df2.drop(columns = [c],inplace = True)
    
df2.drop(columns=[e],inplace = True)#删除最后一列
df3 = df2.head((df2.shape[0])-1)#删除最后一行
a=255-df3
#df3.values#dataframe转化为numpy
plt.imshow(a)
scipy.misc.toimage(df3.values).save('C:/Users/Administrator.SKY-20180518VHY/Desktop/2.jpg')#保存图像

最终得到的图像为

用Python去除图像的黑色或白色背景实例

在此处考虑过将图像变为列表,但在此处做嵌套列表太为复杂,因而放弃,最终利用DataFrame做的,本考虑将三通道分开分别作运算最终得到的R、G、B三通道图像由于大小不匹配无法整合到一起,又失败了。只能得到单通道凑合弄吧。谁有好的思路,求沟通…

完整程序:

import os
from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.misc
def save_pic(file_path):

  c = []
  names = os.listdir(file_path) #路径
  #将文件夹中的文件名称与后边的 .dcm分开
  for name in names:
    c.append(name)
  for files in c :
    img = Image.open(file_path+'\\'+files)
    e,g=img.size
    img1=img.convert('L')
    img1=np.array(img1, dtype='float32')
    arr=255-img1
    arr1 = arr.sum(axis=0)#每一列求和
    arr2 = arr.sum(axis=1)#每一行求和
    df=pd.DataFrame(arr)#把像素点转化为dataframe
    df.insert(len(df.columns),len(df.columns),arr2)#最后一列插入每一行的和
    df1=pd.concat([df,(pd.DataFrame(df.sum()).T)])#最后一行插入每一列的和
    df2=df1[df1[e]>0]#根据最后一列把大于0的行筛选出来
    
    #根据最后一行,把等于0的列删除掉
    for c in df2.columns:
      if df2[c].sum() == 0 :
        df2.drop(columns = [c],inplace = True)
        
    df2.drop(columns=[e],inplace = True)#删除最后一列
    df3 = df2.head((df2.shape[0])-1)#删除最后一行
    #df3.values#dataframe转化为numpy
    a=255-df3 
    plt.imshow(a)
    scipy.misc.toimage(a).save('C:/Users/Administrator.SKY-20180518VHY/Desktop'+'/'+files)#保存图像
  print('all is saved')  
  
save_pic(file_path='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\1')

去除多个文件夹下多张图像,分别为:

用Python去除图像的黑色或白色背景实例

程序为:

import os
from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.misc
def save_pic(file_path):

  c = []
  d=[]
  names = os.listdir(file_path) #路径
  #将文件夹中的文件名称与后边的 .dcm分开
  for name in names:
    c.append(name)
  for files1 in c:
    n=os.listdir(file_path+'\\'+files1)
    for name in n:
      d.append(file_path+'\\'+files1+'\\'+name)

    for files2 in d :
      img = Image.open(files2)
      e,g=img.size
      img1=img.convert('L')
      img1=np.array(img1, dtype='float32')
      arr=255-img1
      arr1 = arr.sum(axis=0)#每一列求和
      arr2 = arr.sum(axis=1)#每一行求和
      df=pd.DataFrame(arr)#把像素点转化为dataframe
      df.insert(len(df.columns),len(df.columns),arr2)#最后一列插入每一行的和
      df1=pd.concat([df,(pd.DataFrame(df.sum()).T)])#最后一行插入每一列的和
      df2=df1[df1[e]>0]#根据最后一列把大于0的行筛选出来
      
      #根据最后一行,把等于0的列删除掉
      for c in df2.columns:
        if df2[c].sum() == 0 :
          df2.drop(columns = [c],inplace = True)
          
      df2.drop(columns=[e],inplace = True)#删除最后一列
      df3 = df2.head((df2.shape[0])-1)#删除最后一行
      df3.values#dataframe转化为numpy
      a=255-df3
      plt.imshow(a)
      scipy.misc.toimage(a).save('C:/Users/Administrator.SKY-20180518VHY/Desktop'+'/'+ '%d.jpg'%(d.index(files2)))#保存图像
  print('all is saved')  
  
save_pic(file_path='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\2')

以上这篇用Python去除图像的黑色或白色背景实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python fabric使用笔记
May 09 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
对Python信号处理模块signal详解
Jan 09 Python
python实现多张图片拼接成大图
Jan 15 Python
Python3多线程基础知识点
Feb 19 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
python 下划线的不同用法
Oct 24 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 #Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 #Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 #Python
Python FtpLib模块应用操作详解
Dec 12 #Python
Python PyInstaller库基本使用方法分析
Dec 12 #Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 #Python
python opencv图片编码为h264文件的实例
Dec 12 #Python
You might like
网站当前的在线人数
2006/10/09 PHP
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python中unittest用法实例
2014/09/25 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
python负载均衡的简单实现方法
2018/02/04 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
django的ORM模型的实现原理
2019/03/04 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
大学运动会通讯稿
2014/01/28 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
学习雷锋标语
2014/06/25 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
泰山导游词
2015/02/02 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL