用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深入学习之上下文管理器
Aug 31 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
基于Python List的赋值方法
Jun 23 Python
Python 运行 shell 获取输出结果的实例
Jan 07 Python
Python对象转换为json的方法步骤
Apr 25 Python
django 消息框架 message使用详解
Jul 22 Python
python实现知乎高颜值图片爬取
Aug 12 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python如何编写win程序
Jun 08 Python
Python3中的tuple函数知识点讲解
Jan 03 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 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 array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python二维码生成识别实例详解
2019/07/16 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
python 制作磁力搜索工具
2021/03/04 Python
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
护士自我评价范文
2014/01/25 职场文书
教室布置标语
2014/06/26 职场文书
促销活动总结模板
2014/07/01 职场文书
杨善洲观后感
2015/06/04 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android