zoukankan      html  css  js  c++  java
  • 图像的批处理

    有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理,有如下两种方法:

    • 通过循环来执行处理
    • 调用程序自带的图片集合来处理

    对于第二种方法,用到的图片集合函数为

    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))

    显示结果为27, 说明系统自带了27张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))

    结果为:5

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

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

    from skimage import data_dir,io,color
    
    def 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])

    结果如下图所示:

    这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合。我们也可以对图片进行批量操作后,想把操作后的结果保存起来。

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

    注解:改变图片的大小,我们可以使用tranform模块的resize()函数

    from skimage import data_dir,io,transform,color
    import numpy as np
    
    def 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])  #循环保存图片

    结果如下所示:

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/Terrypython/p/9947394.html
Copyright © 2011-2022 走看看