Python数字图像处理(3):图像像素的访问和裁剪

图片读入程序后,是以numpy数组的形式存在的。因此对numpy数组的一切操作和功能,对图片也适用。对数组元素的访问,实际上就是对图像像素的访问。

  • 彩色图像的访问形式:
    image[i, j, c]
    其中,i表示图片的行数,j表示图片的列数,c表示图片的通道数(RGB三通道分别对应0,1,2),坐标是从左上角开始的。
  • 灰度图片访问方式为:
    gray[i, j]
例一:输出小猫图片的G通道中的第20行30列的像素值
  from skimage import io,data
  img = data.chelsea()
  pixel = img[20,30,1]
  print(pixel)

输出为129。

例二:显示小猫图片的红色通道的图片
  from skimage import io, data
  img = data.chelsea()
  R = img[:, :, 0]
  io.imshow(R)
  io.show()
Python数字图像处理(3):图像像素的访问和裁剪_第1张图片
红色通道的小猫图片

除了对图像进行读取外,还可以对图像进行修改。

例三:给小猫图片添加噪声
    from skimage import io, data
    import numpy as np
    img=data.chelsea()
    
    def add_noise(image):
        rows, cols, dim3 = image.shape
        n = rows * cols / 10
        for i in range(n):
            x = np.random.randint(0, rows)
            y = np.random.randint(0, cols)
            image[x, y, :] = 255
        return image
    image = add_noise(img)
    io.imshow(image)
    io.show()

输出结果为:

Python数字图像处理(3):图像像素的访问和裁剪_第2张图片
添加噪声的小猫图片

这里用到了numpy包里的random来生成随机数, randint(0, cols)表示随机生成一个整数,范围在0到cols之间。
img[x, y, :] = 255这句来对像素值进行修改,将原来的三通道像素值,变为255。

例四:对小猫图片进行裁剪
    from skimage import io, data
    img=data.chelsea()
    roi=img[180:280, 200:300, :]
    io.imshow(roi)
    io.show()
Python数字图像处理(3):图像像素的访问和裁剪_第3张图片
裁剪的小猫图片
例五:对小猫图片进行二值化
    from skimage import io, data, color
    img=data.chelsea()
    img_gray=color.rgb2gray(img)
    rows,cols=img_gray.shape
    for i in range(rows):
        for j in range(cols):
            if (img_gray[i,j]<=0.5):
                img_gray[i,j]=0
            else:
                img_gray[i,j]=1
    io.imshow(img_gray)
    io.show()
Python数字图像处理(3):图像像素的访问和裁剪_第4张图片
二值化的小猫

这个例子,使用了color模块的rgb2gray()函数,将彩色三通道图片转换成灰度图。转换结果为float64类型的数组,范围为[0,1]之间。

你可能感兴趣的:(Python数字图像处理(3):图像像素的访问和裁剪)