用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中degrees()方法的使用
May 18 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
Python卸载模块的方法汇总
Jun 07 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
如何通过python画loss曲线的方法
Jun 26 Python
关于Python解包知识点总结
May 05 Python
浅谈django 重载str 方法
May 19 Python
Django配置Bootstrap, js实现过程详解
Oct 13 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
Python变量作用范围实例分析
2015/07/07 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python 显示数组全部元素的方法
2018/04/19 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Django框架models使用group by详解
2020/03/11 Python
django 外键创建注意事项说明
2020/05/20 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
公司周年庆典邀请函
2014/01/12 职场文书
档案接收函
2014/01/13 职场文书
大学生活动策划方案
2014/02/10 职场文书
剪彩仪式主持词
2014/03/19 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android