用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构建网页爬虫原理分析
Dec 19 Python
pyqt5简介及安装方法介绍
Jan 31 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
python爬虫获取百度首页内容教学
Dec 23 Python
python+django+rest框架配置创建方法
Aug 31 Python
django创建超级用户过程解析
Sep 18 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
Django choices下拉列表绑定实例
Mar 13 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
浅析Python中的套接字编程
Jun 22 Python
python中tkinter复选框使用操作
Nov 11 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
设定php简写功能的方法
2019/11/28 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
flexigrid 参数说明
2010/11/23 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
JS实现京东商品分类侧边栏
2020/12/11 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Django web框架使用url path name详解
2019/04/29 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
公司委托书范本
2014/04/04 职场文书
工伤事故证明
2014/10/20 职场文书
教师读书活动心得体会
2016/01/14 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL