用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批量修改文件名的实现代码
Sep 01 Python
django加载本地html的方法
May 27 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
python os.fork() 循环输出方法
Aug 08 Python
基于python实现学生信息管理系统
Nov 22 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
python实现人机猜拳小游戏
Feb 03 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 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
推荐十款免费 WordPress 插件
2015/03/24 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
JS 对象介绍
2010/01/20 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python错误处理操作示例
2018/07/18 Python
详解python中递归函数
2019/04/16 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python实现磁盘日志清理的示例
2020/11/05 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
大型会议策划方案
2014/05/17 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
小学语文复习计划
2015/01/19 职场文书
法学专业求职信范文
2015/03/19 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
python之基数排序的实现
2021/07/26 Python
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫