博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Numpy图像处理快速入门
阅读量:5875 次
发布时间:2019-06-19

本文共 1827 字,大约阅读时间需要 6 分钟。

  hot3.png

1.导入必要的库

import numpy as npimport scipy%matplotlib  inlineimport 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 * channelspixels = 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 < 87image[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.shaperow,col = np.ogrid[:nrows,:ncols]cnt_row,cnt_col = nrows / 2,ncols / 2outer_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列的像素为0cat[50,60] = 0# 设置第50行第60列的像素为绿色cat[50,60] = [0,255,0]

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

cat = data.chelsea()# 对图像第一个通道像素进行Mask索引reddish = cat[:,:,0] > 160cat[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

你可能感兴趣的文章
[原创]FineUI秘密花园(二十三) — 树控件概述
查看>>
【Java学习笔记】如何写一个简单的Web Service
查看>>
Xcode 文档注释
查看>>
如何解决This system is not registered with RHN.
查看>>
Cocos2d-x学习笔记(两)Cocos2d-x总体框架
查看>>
拆解探索MagSafe电源接口结构和指示灯变颜色原理
查看>>
Android中EditText,Button等控件的设置
查看>>
lintcode:Remove Nth Node From End of Lis 删除链表中倒数第n个节点
查看>>
POJ 1915-Knight Moves (单向BFS &amp;&amp; 双向BFS 比)
查看>>
java中在linux下利用jstack检测死锁
查看>>
linux编译安装LAMP
查看>>
php中的continue用法
查看>>
Android小游戏应用---撕破美女衣服游戏
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
查看>>
软链接和硬链接详解
查看>>
HTML5 video 视频标签 常用属性
查看>>
深入理解javascript对象系列第一篇——初识对象
查看>>
Ubuntu16.04下搭建Go语言环境
查看>>