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

python中利用numpy库和scipy库来进行各种数据操作和科学计算。我们可以通过pip来直接安装这两个库

pip install numpy

pip install scipy

以后,只要是在python中进行数字图像处理,我们都需要导入这些包:

from PIL importImageimportnumpy as npimport matplotlib.pyplot as plt

打开图像并转化为矩阵,并显示:

from PIL importImageimportnumpy as npimportmatplotlib.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对象转换为数组对象。

查看图片信息,可用如下的方法:

printimg.shapeprintimg.dtypeprintimg.sizeprint type(img)

如果是RGB图片,那么转换为array之后,就变成了一个rows*cols*channels的三维矩阵,因此,我们可以使用

img[i,j,k]

来访问像素值。

例1:打开图片,并随机添加一些椒盐噪声

from PIL importImageimportnumpy as npimportmatplotlib.pyplot as plt

img=np.array(Image.open('d:/ex.jpg'))#随机生成5000个椒盐

rows,cols,dims=img.shapefor i in range(5000):

x=np.random.randint(0,rows)

y=np.random.randint(0,cols)

img[x,y,:]=255plt.figure("beauty")

plt.imshow(img)

plt.axis('off')

plt.show()

例2:将lena图像二值化,像素值大于128的变为1,否则变为0

from PIL importImageimportnumpy as npimportmatplotlib.pyplot as plt

img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))

rows,cols=img.shapefor i inrange(rows):for j inrange(cols):if (img[i,j]<=128):

img[i,j]=0else:

img[i,j]=1plt.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如何调用图片-用python简单处理图片(4):图像中的像素访问相关推荐

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

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

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

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

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

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

  4. python找出在原图中的位置_用python简单处理图片(4):图像中的像素访问

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

  5. 用python简单处理图片(4):图像中的像素访问

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

  6. python使用matplotlib可视化折线图、在可视化图像中同时绘制多条折线图

    python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图 目录 python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图

  7. 一种移动端简单的检测图像中身份证(银行卡)的方式

    一种简单的检测图像中身份证(银行卡)的方式 客户端检测身份证.银行卡之类的功能应该是很常见的,一般都是采用集成第三方OCR sdk来完成信息的采集.但是如何只是初步识别相机镜头中到底包不包含身份证,然 ...

  8. python如何调用图片-python调用图片

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python本身也有识别图片转文字的框架,但是相比调用接口,识别的精度就略显不行 ...

  9. python绘制灰度图片直方图-python数字图像处理实现直方图与均衡化

    在图像处理中,直方图是非常重要,也是非常有用的一个处理要素. 在skimage库中对直方图的处理,是放在exposure这个模块中. 1.计算直方图 函数:skimage.exposure.histo ...

最新文章

  1. .NET中小数,浮点数和双精度之间的区别?
  2. 分布式缓存的面试题8
  3. LSMW批处理使用方法(07)_步骤6、7
  4. Http、Socket、WebSocket之间联系与区别
  5. .NET 2.0 RC的一个Bug
  6. STL中sort算法简析
  7. anaconda moviepy_Anaconda和PyCharm的详细安装步骤~小白专用,手把手教学
  8. 帧间差分法_OpenCV_详解
  9. php5.3.3php5.4如何支持zend,php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)
  10. SQL Server整合–在单个SQL Server实例上托管多个数据库
  11. 【金融工程实验】【matlab】使用candle函数画日均k线图
  12. maven项目转换成dynamic项目
  13. es6 模板字变量和字符串占位符
  14. 洛谷OJ P1003 铺地摊
  15. 饿了么移动 APP 的架构演进
  16. HTML + CSS + JavaScript 两小时快速入门教程
  17. 降采样滤波器 matlab,降采样FIR滤波器的设计与硬件实现
  18. 减员云售前可降本增效
  19. 复制网站zencart模板的方法
  20. 大数据营销咨询公司AIO获数百万美元天使轮融资

热门文章

  1. mac mysql 5.7.9安装教程_mac系统OS X10.10版本安装最新5.7.9mysql的方法_MySQL
  2. 安卓最好用的浏览器_iOS最好用的浏览器,没有之一!
  3. wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
  4. latex hyperref_LaTeX 使用心得
  5. 安装android studio出现choose an account with administrator
  6. 安全 日志挖掘 分析系统数据源
  7. base64 长度补全
  8. python3 aes 解密
  9. 洛谷P2679 子串
  10. PHP strlen()函数和strpos()函数