用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中安装模块包版本冲突问题的解决
May 02 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
django中间键重定向实例方法
Nov 10 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python 实现线程之间的通信示例
Feb 14 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
document.open() 与 document.write()的区别
2007/08/13 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python是怎么被发明的
2020/06/15 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
附答案的Java面试题
2012/11/19 面试题
写自荐信要注意什么
2013/12/26 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
职业规划实施方案
2014/06/10 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
政风行风建设责任书
2014/07/23 职场文书
员工安全责任书范本
2014/07/24 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL