用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动态加载变量示例分享
Feb 17 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
django模板语法学习之include示例详解
Dec 17 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 Python
如何用python绘制雷达图
Apr 24 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
May 10 Python
Python实现滑雪小游戏
Sep 25 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
详解node和ES6的模块导出与导入
2020/02/19 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
2014年信用社工作总结
2014/11/25 职场文书