用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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
python使用wmi模块获取windows下硬盘信息的方法
May 15 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
python用post访问restful服务接口的方法
Dec 07 Python
Python实现的各种常见分布算法示例
Dec 13 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
TensorFlow固化模型的实现操作
May 26 Python
python神经网络学习 使用Keras进行简单分类
May 04 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生成自己的LOG文件
2006/10/09 PHP
PHP基础学习小结
2011/04/17 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
巧用canvas
2017/01/21 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
js实现打字小游戏
2019/12/17 Javascript
python发布模块的步骤分享
2014/02/21 Python
python 2.7.14安装图文教程
2018/04/08 Python
Django开发中的日志输出的方法
2018/07/02 Python
对Python实现累加函数的方法详解
2019/01/23 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Django中间件基础用法详解
2019/07/18 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
浅谈Python 函数式编程
2020/06/20 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
strstr()的简单实现
2013/09/26 面试题
房屋改造计划书
2014/01/10 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
先进集体事迹材料
2014/02/17 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
高三语文复习计划
2015/01/19 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
酒店温馨提示语
2015/07/14 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python