python数字图像处理(6):图像的批量处理
来源:互联网 发布:农业大数据发展趋势 编辑:程序博客网 时间:2024/05/10 22:03
声明:本文转自http://blog.csdn.net/haoji007/article/category/6337049,但其也为转载,原作者不明,感谢原作者的付出和分享。
有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理。这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理。
图片集合函数为:
skimage.io.
ImageCollection
(load_pattern,load_func=None)
这个函数是放在io模块内的,带两个参数,第一个参数load_pattern, 表示图片组的路径,可以是一个str字符串。第二个参数load_func是一个回调函数,我们对图片进行批量处理就可以通过这个回调函数实现。回调函数默认为imread(),即默认这个函数是批量读取图片。
先看一个例子:
import skimage.io as iofrom skimage import data_dirstr=data_dir + '/*.png'coll = io.ImageCollection(str)print(len(coll))
显示结果为25, 说明系统自带了25张png的示例图片,这些图片都读取了出来,放在图片集合coll里。如果我们想显示其中一张图片,则可以在后加上一行代码:
io.imshow(coll[10])
显示为:
如果一个文件夹里,我们既存放了一些jpg格式的图片,又存放了一些png格式的图片,现在想把它们全部读取出来,该怎么做呢?
import skimage.io as iofrom skimage import data_dirstr='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): rgb=io.imread(f) 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)
带一个参数,就是以上的图片集合,如:
from skimage import data_dir,io,colorcoll = io.ImageCollection('d:/pic/*.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(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,colorimport numpy as npdef convert_gray(f): rgb=io.imread(f) #依次读取rgb图片 gray=color.rgb2gray(rgb) #将rgb图片转换成灰度图 dst=transform.resize(gray,(256,256)) #将灰度图片大小转换为256*256 return dst str=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]) #循环保存图片
结果:
- python数字图像处理(6):图像的批量处理
- python数字图像处理(6):图像的批量处理
- python数字图像处理(6):图像的批量处理
- python数字图像处理:图像的绘制
- python数字图像处理(5):图像的绘制
- python数字图像处理(7):图像的形变与缩放
- python数字图像处理(5):图像的绘制
- python数字图像处理(7):图像的形变与缩放
- python数字图像处理(5):图像的绘制
- python数字图像处理(7):图像的形变与缩放
- python数字图像处理-图像的基本结构和基础知识
- 数字图像处理,图像的伪彩色处理
- python数字图像处理(10):图像简单滤波
- python数字图像处理(10):图像简单滤波
- python数字图像处理(11):图像自动阈值分割
- python数字图像处理(10):图像简单滤波
- python数字图像处理(11):图像自动阈值分割
- python数字图像处理(2):图像的读取、显示与保存
- Android中实现快速搜索
- pandas基本使用方法示例
- NameNode作用--笔记
- 深入了解Java中的异常
- 用IntelliJ IDEA 从svn检出javaweb项目进行开发
- python数字图像处理(6):图像的批量处理
- 大二上学期
- Java中hashCode的作用
- Android Neon
- 【从零开始学习MySql数据库】(3)函数与子查询和连接查询
- 关于flex&bison(lex&yacc)解析JSON的探索
- JavaScript变量类型:值类型与引用类型
- java学习笔记:定义一个点(Point)类用来表示三维空间中的点(有三个坐标)。
- 【从零开始学习MySql数据库】(4)创建表与增删改和数据库事务