用python处理图片实现图像中的像素访问


Posted in Python onMay 04, 2018

前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作。如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了。因此,通常我们加载完图片后,都是把图片转换成矩阵来进行更加复杂的操作。

python中利用numpy库和scipy库来进行各种数据操作和科学计算。我们可以通过pip来直接安装这两个库

pip install numpy
pip install scipy

以后,只要是在python中进行数字图像处理,我们都需要导入这些包:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

打开图像并转化为矩阵,并显示:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/lena.jpg')) #打开图像并转化为数字矩阵
plt.figure("dog")
plt.imshow(img)
plt.axis('off')
plt.show()

调用numpy中的array()函数就可以将PIL对象转换为数组对象。

查看图片信息,可用如下的方法:

print img.shape 
print img.dtype 
print img.size 
print type(img)

如果是RGB图片,那么转换为array之后,就变成了一个rows*cols*channels的三维矩阵,因此,我们可以使用img[i,j,k]来访问像素值。

例1:打开图片,并随机添加一些椒盐噪声

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/ex.jpg'))

#随机生成5000个椒盐
rows,cols,dims=img.shape
for i in range(5000):
  x=np.random.randint(0,rows)
  y=np.random.randint(0,cols)
  img[x,y,:]=255
  
plt.figure("beauty")
plt.imshow(img)
plt.axis('off')
plt.show()

用python处理图片实现图像中的像素访问

例2:将lena图像二值化,像素值大于128的变为1,否则变为0

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))

rows,cols=img.shape
for i in range(rows):
  for j in range(cols):
    if (img[i,j]<=128):
      img[i,j]=0
    else:
      img[i,j]=1
      
plt.figure("lena")
plt.imshow(img,cmap='gray')
plt.axis('off')
plt.show()

用python处理图片实现图像中的像素访问

如果要对多个像素点进行操作,可以使用数组切片方式访问。切片方式返回的是以指定间隔下标访问 该数组的像素值。下面是有关灰度图像的一些例子:

img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行
img[:,i] = 100 # 将第 i 列的所有数值设为 100
img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和
img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
img[i].mean() # 第 i 行所有数值的平均值
img[:,-1] # 最后一列
img[-2,:] (or im[-2]) # 倒数第二行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
python实现一组典型数据格式转换
Dec 15 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
Django数据统计功能count()的使用
Nov 30 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
用python处理图片之打开\显示\保存图像的方法
May 04 #Python
Python 创建空的list,以及append用法讲解
May 04 #Python
浅谈python中字典append 到list 后值的改变问题
May 04 #Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 #Python
对python中的pop函数和append函数详解
May 04 #Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 #Python
对python append 与浅拷贝的实例讲解
May 04 #Python
You might like
PHP中调用JAVA
2006/10/09 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
基于python指定包的安装路径方法
2018/10/27 Python
对python中的argv和argc使用详解
2018/12/15 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
小学美术教学反思
2014/02/01 职场文书
会计演讲稿范文
2014/05/23 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
导游词之张家口
2019/12/13 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
解决Redis启动警告问题
2022/02/24 Redis
Python语言中的数据类型-序列
2022/02/24 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript