python数字图像处理(6):图像的批量处理

有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理。这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理。

图片集合函数为:

skimage.io.ImageCollection(load_pattern,load_func=None)

这个函数是放在io模块内的,带两个参数,第一个参数load_pattern, 表示图片组的路径,可以是一个str字符串。第二个参数load_func是一个回调函数,我们对图片进行批量处理就可以通过这个回调函数实现。回调函数默认为imread(),即默认这个函数是批量读取图片。

先看一个例子:

import skimage.io as io
from skimage import data_dir
str=data_dir + '/*.png'
coll = io.ImageCollection(str)
print(len(coll))

显示结果为25, 说明系统自带了25张png的示例图片,这些图片都读取了出来,放在图片集合coll里。如果我们想显示其中一张图片,则可以在后加上一行代码:

io.imshow(coll[10])

显示为:

如果一个文件夹里,我们既存放了一些jpg格式的图片,又存放了一些png格式的图片,现在想把它们全部读取出来,该怎么做呢?

import skimage.io as io
from skimage import data_dir
str='d:/pic/*.jpg:d:/pic/*.png'
coll = io.ImageCollection(str)
print(len(coll))

注意这个地方'd:/pic/*.jpg:d:/pic/*.png' ,是两个字符串合在一起的,第一个是'd:/pic/*.jpg', 第二个是'd:/pic/*.png' ,合在一起后,中间用冒号来隔开,这样就可以把d:/pic/文件夹下的jpg和png格式的图片都读取出来。如果还想读取存放在其它地方的图片,也可以一并加进去,只是中间同样用冒号来隔开。

io.ImageCollection()这个函数省略第二个参数,就是批量读取。如果我们不是想批量读取,而是其它批量操作,如批量转换为灰度图,那又该怎么做呢?

那就需要先定义一个函数,然后将这个函数作为第二个参数,如:

from skimage import data_dir,io,colordef convert_gray(f,**arg):rgb=io.imread(f,**arg)return color.rgb2gray(rgb)str=data_dir+'/*.png'
coll = io.ImageCollection(str,load_func=convert_gray)
io.imshow(coll[10])

这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合(这个没调通)

from skimage import data_dir,io,colorclass AVILoader:video_file = 'myvideo.avi'def __call__(self, frame):return video_read(self.video_file, frame)avi_load = AVILoader()frames = range(0, 1000, 10) # 0, 10, 20, ...
ic =io.ImageCollection(frames, load_func=avi_load)

这段代码的意思,就是将myvideo.avi这个视频中每隔10帧的图片读取出来,放在图片集合中。

得到图片集合以后,我们还可以将这些图片连接起来,构成一个维度更高的数组,连接图片的函数为:

skimage.io.concatenate_images(ic)

带一个参数,就是以上的图片集合,文件名字有"img_"相同的jpg图片。 如:

from skimage import data_dir,io,colorcoll = io.ImageCollection('d:/pic/img_*.jpg')
mat=io.concatenate_images(coll)

使用concatenate_images(ic)函数的前提是读取的这些图片尺寸必须一致,否则会出错。我们看看图片连接前后的维度变化:

from skimage import data_dir,io,colorcoll = io.ImageCollection('d:/pic/*.jpg')
print(len(coll))      #连接的图片数量
print(coll[0].shape)   #连接前的图片尺寸,所有的都一样
mat=io.concatenate_images(coll)print(len(mat))   #包含的图片数量
print(mat.shape)  #连接后的数组尺寸

显示结果:

2
(870, 580, 3)
(2, 870, 580, 3)

可以看到,将2个3维数组,连接成了一个4维数组

如果我们对图片进行批量操作后,想把操作后的结果保存起来,也是可以办到的。

例:把系统自带的所有png示例图片,全部转换成256*256的jpg格式灰度图,保存在d:/data/文件夹下

改变图片的大小,我们可以使用tranform模块的resize()函数,后续会讲到这个模块。

from skimage import data_dir,io,transform,color
import numpy as npdef convert_gray(f):rgb=io.imread(f)    #依次读取rgb图片gray=color.rgb2gray(rgb)   #将rgb图片转换成灰度图dst=transform.resize(gray,(256,256))  #将灰度图片大小转换为256*256return dststr=data_dir+'/*.png'
coll = io.ImageCollection(str,load_func=convert_gray)
for i in range(len(coll)):io.imsave('d:/data/'+np.str(i)+'.jpg',coll[i])  #循环保存图片(这个相当可以)

结果:

转载于:https://www.cnblogs.com/byteHuang/p/7132749.html

批量读写变换图片(转)相关推荐

  1. (九)图片动漫风格变换、图片卡通风格变换、批量处理、图片转动漫风格、图片转卡通风格、视频转动漫风格、视频转卡通风格

    (九)图片动漫风格变换.图片卡通风格变换.批量处理.图片转动漫风格.图片转卡通风格.视频转动漫风格.视频转卡通风格 本文的代码的功能是:可以对图片文件.视频批量变换成动漫.卡通的风格,共有5种风格可以 ...

  2. MATLAB【四】 ————批量适配图片信息与excel/txt等文档信息,批量移动拷贝图片,批量存图片中点和方框

    1.批量读取图片,批量读取文件 2.适配文件与excel.txt等文档信息 3.获取显示图片ROI.Point.rect.更改像素值 4.批量移动拷贝图片,批量显示 5.保存显示图片或者图片中的点和方 ...

  3. word存为html图片有两个,如何批量保存Word图片?另存为Word多个图片的方法

    如何批量保存Word图片?很多用户在发送Word文档的时候都没有附上原图的习惯,导致接收方需要使用Word文档中的图片的时候还需要一个个另存为下载,当然,这是不明智的行为,如果你曾经历过这些,一定想知 ...

  4. 4.使用pnglib读写png图片

    4.使用pnglib读写png图片 本章前言: 这章就是为了读取png格式图像到32位位图(ARGB)中,逆之则然,废话少说开始正题. 目标要点总结: 1.  使用pnglib读写文件 最终效果: 以 ...

  5. aspx网页背景图片设置代码_python requests,BeautifulSoup批量下载360图片

    本代码演示通过python的requests,BeautifulSoup库批量下载360图片,并保存在本机的路径 代码如下: #BeautifulSoup库是网页爬虫解析库,主要用来对HTML源代码进 ...

  6. python redis pipeline使用方法_python使用pipeline批量读写redis的方法

    用了很久的redis了.随着业务的要求越来越高.对redis的读写速度要求也越来越高.正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考 ...

  7. .net pdf转图片_pdf2image类库实现批量pdf转图片

    通过pdf2image来实现对PDF文件的处理工作,我们本次主要做的是将PDF文件批量转成图片.之前写过批量提取封面的文章,但是在后期的深入编写过程中遇到一些问题,近期再次深入编写程序,一起来看看代码 ...

  8. Python批量删除错误图片、修改文件名以及删除重复图片

    一.批量删除错误图片: 代码如下: import osfor name in range(1,150):with open('C:\\Users\\adimin\\Desktop\\Pixiv_Img ...

  9. 在线批量压缩JPG图片-JpegMini

    2019独角兽企业重金招聘Python工程师标准>>> 之前有推荐过一个在线批量压缩PNG图片的网站TinyPng,这儿小觉再次推荐一个同类网站,专门在线批量压缩JPG图片的Jpeg ...

最新文章

  1. More than Moore的探索
  2. SQL SERVER 2008 创建,删除,添加表的主键
  3. IUSR_ 计算机名和IWAM_ 计算机名帐户的用户名和密码
  4. 常用的 服务器 与 交换机
  5. git merge git pull时候遇到冲突解决办法git stash
  6. python — 列表与元组
  7. 微软 python_微软推出 Pylance,改善 VS Code 中的 Python 体验
  8. 公交线路 思维,分支(女赛)
  9. Android开发五 Android应用程序架构
  10. 数据量很大的排序问题 大量数据如何排序,没有做测试
  11. SAP ABAP gateway调用后台系统时选择RFC的决定逻辑
  12. 8086除法指令DIV,IDIV
  13. realme GT Neo3重磅细节曝光:首发150W快充 5分钟充50%
  14. 【算法导论】【排序】—— 计数排序(counting sort)
  15. Facebook是如何大幅提升TLS连接效率的?
  16. Charles 抓包手机无法上网
  17. 如何在IGV上使用BLAT搜索非模式物种
  18. wireshark 安装与使用
  19. 73. 使用自定义 Query 实现 SAP UI5 页面路由的书签功能
  20. RSI的交易系统以及用rsi指标进行探势

热门文章

  1. 绕过waf mysql爆库_sqlilab-Less-21-30-writeup
  2. python rabitmq_python使用rabbitmq实例二,工作队列
  3. sts 明明导包正确却报错_这真是危险的关系,明明你错了,但是她认了!
  4. Hive之函数与自定义函数
  5. [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
  6. java面向对象super,final,static,匿名对象,内部类学习
  7. php js 的rsa加密
  8. 重写equals()与hashCode()方法
  9. 使用T—SQL语句操作数据库
  10. JS工具类——Select操作类