用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 中的列表解析和生成表达式
Mar 10 Python
python检查序列seq是否含有aset中项的方法
Jun 30 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
使用python3+xlrd解析Excel的实例
May 04 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Python全排列操作实例分析
Jul 24 Python
Python Tornado核心及相关原理详解
Jun 24 Python
用 python 进行微信好友信息分析
Nov 28 Python
Python学习之迭代器详解
Apr 01 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实现ip白名单黑名单功能
2015/03/12 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python break语句详解
2014/03/11 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
赔偿协议书范本
2014/04/15 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
python中取整数的几种方法
2021/11/07 Python
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers