Numpy图像处理快速入门

本文详细介绍了如何使用Python和Numpy库进行图像处理,包括图像的加载、查询图像尺寸和像素值、图像统计信息、像素索引操作等。同时,还演示了如何对灰度图像和彩色图像进行各种操作。

1.导入必要的库

import numpy as np
import scipy
%matplotlib  inline
import matplotlib.pyplot as plt

2.加载图片

image = matplotlib.pyplot.imread('../datas/f4.jpg') #读入的是灰度图像

3.查询图像数据几何数据和像素数量

# 图像的高和宽
rows,cols = image.shape 
# 图像的像素数量,对于灰度图像和二图像pixels = rows*cols,对于RGB或RGBA图像:pixel=rows * cols * channels
pixels = image.size 

4.查询图像统计信息

# 像素最大和最小值
print('max pixel value = %d,min pixel value = %d' % (camera.max(),camera.min()))
# 整个图像像素均值
print('mean = %f' % camera.mean())

5.图像像素索引

图像像素在通过Numpy的NDArray表示,操作方式和操作普通矩阵没有什么区别。 例如。在这里需要注意的一点是,image.shape[0]表示图像的行,image.shape[1]表示图像的列。访问图像的第10行,第20列的像素(Slicing操作):

print('pixel at image(10,20) = %d' % (image[10,20]))

设置前10行为黑色:

image[0:10] = 0

Masking操作(通过布尔值来索引),例如,灰度图像二值化: 查找图像所有小于87的像素值,半把这些像素设置为255:

mask = image < 87
image[mask] = 255

优雅索引(通过坐标集来索引),例如:

index_r = np.arange(len(image))
index_c = 4 * index_r % len(image)
image[index_r,index_c] = 0

使用Mask方式对图像索引,特别是需要对图像像素进一步操作时,相当方便。Mask可以任何与图像大小相同的boolean值数组或者可以广播成图像大小的boolean数组。例如,定义图像兴趣区域(ROI):

camera = plt.imread('../datas/f2.jpg')
nrows,ncols = camera.shape
row,col = np.ogrid[:nrows,:ncols]
cnt_row,cnt_col = nrows / 2,ncols / 2
outer_disk_mask = ((row - cnt_row) ** 2 + (col - cnt_col) ** 2 > (nrows / 2) ** 2)
camera[outer_disk_mask] = 0

6.彩色图像

彩色图像也可能使用Numpy的数组来表示,只不过比灰度图像多了一个维度。

cat = plt.imread('../datas/cat.jpg')
print('shape of clolor image = ',cat.shape)

对像素的索引区别不大,只不过彩色图像返回的是RGB或其他彩色空间类型值

# R、G、B分量
print('pixel = ',cat[10,20])

#设置第50行第60列的像素为0
cat[50,60] = 0
# 设置第50行第60列的像素为绿色
cat[50,60] = [0,255,0]

对彩色图像,同样可以使用Mask方式索引,例如:

cat = data.chelsea()
# 对图像第一个通道像素进行Mask索引
reddish = cat[:,:,0] > 160
cat[reddish] = [0,255,0]
plt.imshow(cat)

7.坐标约定

由于我们使用Numpy array来表示图像,所以图像的坐标必须同Numpy的array相对应。如下所示:

图像类型坐标
2D灰度图像(row,col )
2D多通道图像(row,col,ch )
3D灰度图像(pln,row,col )
3D多通道图像(pln,row,col,ch )

 

转载于:https://my.oschina.net/wujux/blog/1841099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值