用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中的CURL PycURL使用例子
Jun 01 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python2中的raw_input() 与 input()
Jun 12 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
python制作mysql数据迁移脚本
Jan 01 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
Python2与Python3的区别详解
Feb 09 Python
Django Form常用功能及代码示例
Oct 13 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php 文本文件的读取效率
2012/02/10 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
python字符串连接的N种方式总结
2014/09/17 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
OpenCV 边缘检测
2019/07/10 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
商务考察邀请函模板
2015/02/02 职场文书
培训师岗位职责
2015/02/14 职场文书
四风之害观后感
2015/06/09 职场文书