图片读入程序后,是以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()
除了对图像进行读取外,还可以对图像进行修改。
例三:给小猫图片添加噪声
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()
输出结果为:
这里用到了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()
例五:对小猫图片进行二值化
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()
这个例子,使用了color模块的rgb2gray()函数,将彩色三通道图片转换成灰度图。转换结果为float64类型的数组,范围为[0,1]之间。