前面的一些例子中,我们都是利用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()

例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()

如果要对多个像素点进行操作,可以使用数组切片方式访问。切片方式返回的是以指定间隔下标访问 该数组的像素值。下面是有关灰度图像的一些例子:

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处理图片实现图像中的像素访问

本文地址: http://www.cppcns.com/jiaoben/python/227041.html

python像素大于_用python处理图片实现图像中的像素访问相关推荐

  1. python获取图片像素矩阵_用python处理图片实现图像中的像素访问

    这篇文章主要介绍了关于用python处理图片实现图像中的像素访问,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然 ...

  2. python像素处理_用python处理图片实现图像中的像素访问

    前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

  3. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. 《OpenCV3编程入门》学习笔记5 Core组件进阶(一)访问图像中的像素

    第5章 Core组件进阶 5.1 访问图像中的像素 5.1.1 图像在内存中的存储方式 1.图像矩阵大小取决于通道数,矩阵中的子列个数与通道数相等. 2.如果内存足够大,可以实现连续存储,有助于提升图 ...

  6. OpenCV访问Mat图像中每个像素的值

    原文:http://blog.csdn.net/xiaowei_cqu/article/details/7771760 matlab中, a=[1,2,3;4,5,6;7,8,9] a(1,2) 第一 ...

  7. 访问图像中每个像素的值

    转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7557063 !!此篇是基于IplImage* (C接口或者说2.1之前版本的接口, ...

  8. ITK:计算矢量图像中每个像素的大小以生成大小图像

    ITK:计算矢量图像中每个像素的大小以生成大小图像 内容提要 输出结果 C++实现代码 内容提要 计算矢量图像中每个像素的大小以生成大小图像 输出结果 C++实现代码 #include "i ...

  9. ITK:自定义操作以对应两个图像中的像素

    ITK:自定义操作以对应两个图像中的像素 内容提要 输出结果 C++实现代码 内容提要 对两个图像中的相应像素应用预定义的操作. 输出结果 pixel1 was = 2 pixel2 was = 5 ...

最新文章

  1. FastDFS安装与使用
  2. 第三十一课.矩阵胶囊与EM路由
  3. 关于纯cs3动画的五个原创实例分享
  4. OpenCV图像分割Grabcut算法
  5. MS CRM 2011插件调试工具
  6. MQ产品比较-ActiveMQ-RocketMQ
  7. 脚本安装smokeping
  8. [牛客] Tree-换根dp(预防加法取模导致等0)
  9. keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
  10. Android桌面悬浮窗仿QQ手机管家加速效果
  11. 局域网怎么远程2008服务器,不在局域网怎么远程连接服务器
  12. 让域控制器强制向DNS服务器注册SRV记录
  13. 2345 网址导航劫持 解决办法
  14. idea怎么运行c语言程序,IntelliJ IDEA 10.0 64位运行方法
  15. 透过全球首个知识增强千亿大模型,看到中国AI差异化发展之路
  16. Dw如何创建网页链接?
  17. 什么是FIDO、什么是FIPS浅理解
  18. 1.3寸 SH1106 OLED 屏幕驱动 基于stm32
  19. Windows 10的最新版本是什么?
  20. js根据name获取所有的值

热门文章

  1. 如果算力足够根本不需要标注太多数据
  2. 又一理论横空出现或将颠覆世界
  3. python网络编程例子
  4. 利用graphviz模块展示斐波那契数列的递归函数调用图(Python)
  5. String 中的hashCode方法
  6. 程序员在囧途之做私活小记
  7. Windows 2008R2 RDS RmoteAPP安装及配置
  8. html中内联元素和块元素的区别、用法以及联系
  9. 5款没有专利纠葛的Linux发行版
  10. 将图片资源文件整合到DLL文件中