在程序中如何对图片进行批量处理呢?

  1. 循环操作
  2. 调用库函数中模块实现
skimage.io.ImageCollection(load_pattern,load_func=None)
# 第一个参数load_pattern, 表示图片组的路径,可以是一个str字符串。
# 第二个参数load_func是一个回调函数,
# 我们对图片进行批量处理就可以通过这个回调函数实现。
# 回调函数默认为imread(),即默认这个函数是批量读取图片。

实例:

from skimage import data_dir,io
path_str = data_dir + '/*.png'
all_pic = io.ImageCollection(path_str)
print(len(all_pic))

io.imshow(all_pic[21])

run result:

python中批量读取图片大小 python批量读取和处理图片_python


有29张png图片,第21张如上图。

(注:Ubuntu下的anaconda和windows下的anaconda中skimage中库图片可能不一样。)

问题描述:读取文件夹中后缀不同的图片或者不同文件夹中的图片:

from skimage import io, data_dir
str='c:/pic/*.jpg:c:/pic/*.png'
all_pic = io.ImageCollection(str)
print(len(all_pic))

'c:/pic/*.jpg:c:/pic/*.png' , 是两个字符串合在一起的,
第一个字符串: c:/pic/*.jpg 第二个字符串: c:/pic/*.png 两个字符串是用冒号 :连接在一起的。
如果还想读取存放在其它地方的图片,也可以一并加进去,只是中间同样用冒号来隔开。
io.ImageCollection()这个函数省略第二个参数,就是批量读取如果我们不是想批量读取,而是其它批量操作,如批量转换为灰度图,该如何实现?
解决办法:定义一个函数,然后将这个函数作为第二个参数

from skimage import data_dir,io,color
# 函数功能: 图片转为灰度图
def convert_gray(f):
    rgb = io.imread(f)
    return color.rgb2gray(rgb)

str_path = data_dir + '/*.png'
all_pic = io.ImageCollection(str_path,load_func=convert_gray)
io.imshow(all_pic[10])

run result :

python中批量读取图片大小 python批量读取和处理图片_python_02


以上这种批量操作是十分重要和有用的。例如,我们可以将一段视频以10帧或者1帧进行截取。

我们学会了循环读取图片了,那又应该如何保存呢?
问题描述:把系统自带的所有png示例图片,全部转换成256*256的jpg格式灰度图,保存在新建文件夹data下。

# 把系统自带的所有png示例图片,全部转换成256*256的jpg格式灰度图
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图片转换成灰度图
    res = transform.resize(gray,(256,256)) # #将灰度图片大小转换为256*256
    return res

path_str = data_dir + '/*.png'
all_pic = io.ImageCollection(path_str,load_func=convert_gray)

for i in range(len(all_pic)): # #循环保存图片
    io.imsave('/home/zqq/MyProject/DigitalPicture/day6'+np.str(i)+'.jpg',all_pic[i])

run result:

python中批量读取图片大小 python批量读取和处理图片_ImageCollection()_03


我是在Ubuntu下做的实验,当然在windows环境下也是可以啦。