python数字图像处理之图像的批量处理


Posted in Python onJune 28, 2022

正文

有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理。这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理。

图片集合函数

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

显示结果为25, 说明系统自带了25张png的示例图片,这些图片都读取了出来,放在图片集合coll里。如果我们想显示其中一张图片,则可以在后加上一行代码:

io.imshow(coll[10])

显示为:

python数字图像处理之图像的批量处理

批量读取

如果一个文件夹里,我们既存放了一些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))

注意这个地方'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])

python数字图像处理之图像的批量处理

这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合

from skimage import data_dir,io,color
class 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,color
coll = io.ImageCollection('d:/pic/*.jpg')
mat=io.concatenate_images(coll)

使用concatenate_images(ic)函数的前提是读取的这些图片尺寸必须一致,否则会出错。我们看看图片连接前后的维度变化:

from skimage import data_dir,io,color
coll = 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,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])  #循环保存图片

 结果:

python数字图像处理之图像的批量处理

以上就是python数字图像处理之图像的批量处理的详细内容,更多关于python数字图像批量处理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
python的mysqldb安装步骤详解
Aug 14 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
mac系统安装Python3初体验
Jan 02 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
对Python _取log的几种方式小结
Jul 25 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
django rest framework 自定义返回方式
Jul 12 Python
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
python数字图像处理数据类型及颜色空间转换
python数据分析之单因素分析线性拟合及地理编码
python可视化分析绘制带趋势线的散点图和边缘直方图
基于Python编写一个监控CPU的应用系统
如何基于python实现单目三维重建详解
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
Angular17之Angular自定义指令详解
2018/01/21 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python中的闭包实例详解
2014/08/29 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
会计电算化专业个人的自我评价
2013/11/24 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2015年党员自评材料
2014/12/17 职场文书
公司更名通知函
2015/04/24 职场文书
跑出一片天观后感
2015/06/08 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Java中try catch处理异常示例
2021/12/06 Java/Android
python运算符之与用户交互
2022/04/13 Python