当前位置:   article > 正文

图像处理工具- scikit-image_import scikit-image

import scikit-image

scikit-image基本操作

  • 图像数据通过ndarray表示
  • 图像的像素值通常有以下两种处理范围
    • 1.0-255,0:黑,255:白
    • 2.0-1  ,0:黑,1:白
  • skimage支持以上两种像素范围,至于如何选择是根据数组的dtype决定

1.skimage的图像数据

  1. import skimage
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. # 随机生成500x500的多维数组
  5. random_image = np.random.random([500, 500])
  6. #print(random_image)
  7. plt.imshow(random_image, cmap='gray')
  8. plt.colorbar()

  1. from skimage import data
  2. # 加载skimage中的coin数据
  3. coins = data.coins()
  4. print(type(coins), coins.dtype, coins.shape)
  5. plt.imshow(coins, cmap='gray')
  6. plt.colorbar()

  1. cat = data.chelsea()
  2. print("图片形状:", cat.shape)
  3. print("最小值/最大值:", cat.min(), cat.max())
  4. plt.imshow(cat)
  5. plt.colorbar()
  6. 图片形状: (300, 451, 3)
  7. 最小值/最大值: 0 231

  1. # 在图片上叠加一个红色方块
  2. cat[10:110, 10:110, :] = [255, 0, 0] # [red, green, blue]
  3. plt.imshow(cat)

2.数据类型和像素值

  1. # 生成0-1间的2500个数据
  2. linear0 = np.linspace(0, 1, 2500).reshape((50, 50))
  3. # 生成0-255间的2500个数据
  4. linear1 = np.linspace(0, 255, 2500).reshape((50, 50)).astype(np.uint8)
  5. print("Linear0:", linear0.dtype, linear0.min(), linear0.max())
  6. print("Linear1:", linear1.dtype, linear1.min(), linear1.max())
  7. fig, (ax0, ax1) = plt.subplots(1, 2)
  8. ax0.imshow(linear0, cmap='gray')
  9. ax1.imshow(linear1, cmap='gray')
  10. answer:
  11. Linear0: float64 0.0 1.0
  12. Linear1: uint8 0 255

  • 像素值数据类型转换
    • img_as_float,img_as_ubyte
  1. from skimage import img_as_float, img_as_ubyte
  2. image = data.chelsea()
  3. image_float = img_as_float(image) # 像素值范围:0-1
  4. image_ubyte = img_as_ubyte(image) # 像素值范围:0-255
  5. print("type, min, max:", image_float.dtype, image_float.min(), image_float.max())
  6. print("type, min, max:", image_ubyte.dtype, image_ubyte.min(), image_ubyte.max())
  7. print("231/255 =", 231/255.) # 验证0-255 转换到 0-1
  8. answer:
  9. type, min, max: float64 0.0 0.905882352941
  10. type, min, max: uint8 0 231
  11. 231/255 = 0.9058823529411765

3.显示图像

  • 用过plt.inshow(),可以指定不同的color map
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from skimage import data
  4. image = data.camera()
  5. fig, (ax_jet, ax_gray) = plt.subplots(ncols=2, figsize=(10, 5))
  6. # 使用不同的color map
  7. ax_jet.imshow(image, cmap='jet')
  8. ax_gray.imshow(image, cmap='gray');

  1. # 通过数组切片操作获取人脸区域
  2. face = image[80:160, 200:280]
  3. fig, (ax_jet, ax_gray) = plt.subplots(ncols=2)
  4. ax_jet.imshow(face, cmap='jet')
  5. ax_gray.imshow(face, cmap='gray')

4.图像I/O

  • 加载图像,skimage.io.imread()
  • 同时加载多个图像 skimage.io.imread_collection()
  • 保存.skimage.io.imsave()
  1. from skimage import io
  2. image = io.imread('1.jpg')
  3. print(type(image))
  4. plt.imshow(image)

  1. # 同时加载多个图像
  2. ic = io.imread_collection('*.png')
  3. print(type(ic), '\n\n', ic)
  4. answer:
  5. <class 'skimage.io.collection.ImageCollection'>
  6. ['1.png', '2.png', '3.png', '4.png', '5.png
  7. f, axes = plt.subplots(nrows=1, ncols=len(ic), figsize=(15, 10))
  8. for i, image in enumerate(ic):
  9. axes[i].imshow(image)
  10. axes[i].axis('off')

  1. # 保存图像
  2. saved_img = ic[0]
  3. io.imsave('./output/python_analysis.png', saved_img)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号