在程序中如何对图片进行批量处理呢?
- 循环操作
- 调用库函数中模块实现
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:
有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 :
以上这种批量操作是十分重要和有用的。例如,我们可以将一段视频以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:
我是在Ubuntu下做的实验,当然在windows环境下也是可以啦。