用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使用urllib2提交http post请求的方法
May 26 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python脚本实时处理log文件的方法
Nov 21 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
vue常用指令代码实例总结
Mar 16 Python
python 可视化库PyG2Plot的使用
Jan 21 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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的闭合标签“?&gt;”
2014/08/28 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
js中的闭包学习心得
2018/02/06 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python3.x中自定义比较函数
2015/04/24 Python
Python易忽视知识点小结
2015/05/25 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
护士进修自我鉴定
2014/02/07 职场文书
《童趣》教学反思
2014/02/19 职场文书
技能比武方案
2014/05/21 职场文书
交通事故和解协议书
2014/09/25 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python