批量读写变换图片(转)
python数字图像处理(6):图像的批量处理
有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理。这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理。
图片集合函数为:
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])
显示为:
如果一个文件夹里,我们既存放了一些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,colordef convert_gray(f,**arg):rgb=io.imread(f,**arg)return color.rgb2gray(rgb)str=data_dir+'/*.png' coll = io.ImageCollection(str,load_func=convert_gray) io.imshow(coll[10])
这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合(这个没调通)
from skimage import data_dir,io,colorclass 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)
带一个参数,就是以上的图片集合,文件名字有"img_"相同的jpg图片。 如:
from skimage import data_dir,io,colorcoll = io.ImageCollection('d:/pic/img_*.jpg') mat=io.concatenate_images(coll)
使用concatenate_images(ic)函数的前提是读取的这些图片尺寸必须一致,否则会出错。我们看看图片连接前后的维度变化:
from skimage import data_dir,io,colorcoll = io.ImageCollection('d:/pic/*.jpg') print(len(coll)) #连接的图片数量 print(coll[0].shape) #连接前的图片尺寸,所有的都一样 mat=io.concatenate_images(coll)print(len(mat)) #包含的图片数量 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 npdef convert_gray(f):rgb=io.imread(f) #依次读取rgb图片gray=color.rgb2gray(rgb) #将rgb图片转换成灰度图dst=transform.resize(gray,(256,256)) #将灰度图片大小转换为256*256return dststr=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]) #循环保存图片(这个相当可以)
结果:
转载于:https://www.cnblogs.com/byteHuang/p/7132749.html
批量读写变换图片(转)相关推荐
- (九)图片动漫风格变换、图片卡通风格变换、批量处理、图片转动漫风格、图片转卡通风格、视频转动漫风格、视频转卡通风格
(九)图片动漫风格变换.图片卡通风格变换.批量处理.图片转动漫风格.图片转卡通风格.视频转动漫风格.视频转卡通风格 本文的代码的功能是:可以对图片文件.视频批量变换成动漫.卡通的风格,共有5种风格可以 ...
- MATLAB【四】 ————批量适配图片信息与excel/txt等文档信息,批量移动拷贝图片,批量存图片中点和方框
1.批量读取图片,批量读取文件 2.适配文件与excel.txt等文档信息 3.获取显示图片ROI.Point.rect.更改像素值 4.批量移动拷贝图片,批量显示 5.保存显示图片或者图片中的点和方 ...
- word存为html图片有两个,如何批量保存Word图片?另存为Word多个图片的方法
如何批量保存Word图片?很多用户在发送Word文档的时候都没有附上原图的习惯,导致接收方需要使用Word文档中的图片的时候还需要一个个另存为下载,当然,这是不明智的行为,如果你曾经历过这些,一定想知 ...
- 4.使用pnglib读写png图片
4.使用pnglib读写png图片 本章前言: 这章就是为了读取png格式图像到32位位图(ARGB)中,逆之则然,废话少说开始正题. 目标要点总结: 1. 使用pnglib读写文件 最终效果: 以 ...
- aspx网页背景图片设置代码_python requests,BeautifulSoup批量下载360图片
本代码演示通过python的requests,BeautifulSoup库批量下载360图片,并保存在本机的路径 代码如下: #BeautifulSoup库是网页爬虫解析库,主要用来对HTML源代码进 ...
- python redis pipeline使用方法_python使用pipeline批量读写redis的方法
用了很久的redis了.随着业务的要求越来越高.对redis的读写速度要求也越来越高.正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考 ...
- .net pdf转图片_pdf2image类库实现批量pdf转图片
通过pdf2image来实现对PDF文件的处理工作,我们本次主要做的是将PDF文件批量转成图片.之前写过批量提取封面的文章,但是在后期的深入编写过程中遇到一些问题,近期再次深入编写程序,一起来看看代码 ...
- Python批量删除错误图片、修改文件名以及删除重复图片
一.批量删除错误图片: 代码如下: import osfor name in range(1,150):with open('C:\\Users\\adimin\\Desktop\\Pixiv_Img ...
- 在线批量压缩JPG图片-JpegMini
2019独角兽企业重金招聘Python工程师标准>>> 之前有推荐过一个在线批量压缩PNG图片的网站TinyPng,这儿小觉再次推荐一个同类网站,专门在线批量压缩JPG图片的Jpeg ...
最新文章
- More than Moore的探索
- SQL SERVER 2008 创建,删除,添加表的主键
- IUSR_ 计算机名和IWAM_ 计算机名帐户的用户名和密码
- 常用的 服务器 与 交换机
- git merge git pull时候遇到冲突解决办法git stash
- python — 列表与元组
- 微软 python_微软推出 Pylance,改善 VS Code 中的 Python 体验
- 公交线路 思维,分支(女赛)
- Android开发五 Android应用程序架构
- 数据量很大的排序问题 大量数据如何排序,没有做测试
- SAP ABAP gateway调用后台系统时选择RFC的决定逻辑
- 8086除法指令DIV,IDIV
- realme GT Neo3重磅细节曝光:首发150W快充 5分钟充50%
- 【算法导论】【排序】—— 计数排序(counting sort)
- Facebook是如何大幅提升TLS连接效率的?
- Charles 抓包手机无法上网
- 如何在IGV上使用BLAT搜索非模式物种
- wireshark 安装与使用
- 73. 使用自定义 Query 实现 SAP UI5 页面路由的书签功能
- RSI的交易系统以及用rsi指标进行探势
热门文章
- 绕过waf mysql爆库_sqlilab-Less-21-30-writeup
- python rabitmq_python使用rabbitmq实例二,工作队列
- sts 明明导包正确却报错_这真是危险的关系,明明你错了,但是她认了!
- Hive之函数与自定义函数
- [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
- java面向对象super,final,static,匿名对象,内部类学习
- php js 的rsa加密
- 重写equals()与hashCode()方法
- 使用T—SQL语句操作数据库
- JS工具类——Select操作类