基础读写
基础读写
图片读取
读取单张彩色skimage.io.imread(fname)
函数skimage.io.imshow(arr)
函数,带一个参数,表示需要显示的
from skimage import io
img=io.imread('d:/dog.jpg')
io.imshow(img)
读取单张灰度图片,使用 skimage.io.imread(fname,as_grey=True)
函数,第一个参数为图片路径,第二个参数为
from skimage import io
img=io.imread('d:/dog.jpg',as_grey=True)
io.imshow(img)
内置图片
astronaut 航员图片 coffee 一杯咖啡图片
lena lena美女图片 camera 拿相机的人图片
coins 硬币图片 moon 月亮图片
checkerboard 棋盘图片 horse 马图片
page 书页图片 chelsea 小猫图片
hubble_deep_field 星空图片 text 文字图片
clock 时钟图片 immunohistochemistry 结肠图片
显示这些图片可用如下代码,不带任何参数:
from skimage import io, data
img=data.lena()
io.imshow(img)
图片名对应的就是函数名,如
from skimage import data_dir
print(data_dir)
保存图片
使用imsave(fname,arr)
函数来实现。第一个参数表示保存的路径和名称,第二个参数表示需要保存的数组变量。
from skimage import io,data
img=data.chelsea()
io.imshow(img)
io.imsave('d:/cat.jpg',img)
保存图片的同时也起到了转换格式的作用。如果读取时图片格式为
图片属性
其他的
from skimage import io, data
img = data.chelsea()
io.imshow(img)
print(type(img)) # 显示类型
print(img.shape) # 显示尺寸
print(img.shape[0]) # 图片高度
print(img.shape[1]) # 图片宽度
print(img.shape[2]) # 图片通道数
print(img.size) # 显示总像素个数
print(img.max()) # 最大像素值
print(img.min()) # 最小像素值
print(img.mean()) # 像素平均值
print(img[0][0])# 图像的像素值
# 获取图像的灰度值范围
width = img.size[0]
height = img.size[1]
# 输出图片的像素值
count = 0
for i in range(0, width):
for j in range(0, height):
if img.getpixel((i, j))>=0 and img.getpixel((i, j))<=255:
count +=1
print count
print(height*width)
图像的批量处理
有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理。这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理。
批量读取
图片集合函数为:
skimage.io.ImageCollection(load_pattern,load_func=None)
这个函数是放在
import skimage.io as io
from skimage import data_dir
str=data_dir + '/*.png'
coll = io.ImageCollection(str)
print(len(coll))
显示结果为
io.imshow(coll[10])
如果一个文件夹里,我们既存放了一些
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’
批量处理
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])
视频处理
这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合:
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)
这段代码的意思,就是将
skimage.io.concatenate_images(ic)
带一个参数,就是以上的图片集合,如:
from skimage import data_dir,io,color
coll = io.ImageCollection('d:/pic/*.jpg')
mat=io.concatenate_images(coll)
使用
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)
可以看到,将
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]) #循环保存图片