数字图像处理:python实现图像的批量处理(七)

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

  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:
在这里插入图片描述
有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环境下也是可以啦。

参考和引用:

https://blog.csdn.net/denny2015/article/details/50532968

仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注和喜欢就是我write博文的动力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值