python读取并显示图片的两种方法邊城浪子

少年子弟江湖老,红颜少女的鬓边终于也见到了白发……

在python中除了用opencv,也可以用matplotlib和PIL这两个库操作图片。本人偏爱matpoltlib,因为它的语法更像matlab。

importmatplotlib.pyplotasplt#plt用于显示图片importmatplotlib.imageasmpimg#mpimg用于读取图片importnumpyasnplena=mpimg.imread('lena.png')#读取和代码处于同一目录下的lena.png#此时lena就已经是一个np.array了,可以对它进行任意处理lena.shape#(512,512,3)plt.imshow(lena)#显示图片plt.axis('off')#不显示坐标轴plt.show()2.显示某个通道#显示图片的第一个通道lena_1=lena[:,:,0]plt.imshow('lena_1')plt.show()#此时会发现显示的是热量图,不是我们预想的灰度图,可以添加cmap参数,有如下几种添加方法:plt.imshow('lena_1',cmap='Greys_r')plt.show()img=plt.imshow('lena_1')img.set_cmap('gray')#'hot'是热量图plt.show()3.将RGB转为灰度图matplotlib中没有合适的函数可以将RGB图转换为灰度图,可以根据公式自定义一个:

defrgb2gray(rgb):returnnp.dot(rgb[...,:3],[0.299,0.587,0.114])gray=rgb2gray(lena)#也可以用plt.imshow(gray,cmap=plt.get_cmap('gray'))plt.imshow(gray,cmap='Greys_r')plt.axis('off')plt.show()4.对图像进行放缩这里要用到scipy

fromscipyimportmisclena_new_sz=misc.imresize(lena,0.5)#第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸plt.imshow(lena_new_sz)plt.axis('off')plt.show()5.保存图像5.1保存matplotlib画出的图像

该方法适用于保存任何matplotlib画出的图像,相当于一个screencapture。

plt.imshow(lena_new_sz)plt.axis('off')plt.savefig('lena_new_sz.png')5.2将array保存为图像

fromscipyimportmiscmisc.imsave('lena_new_sz.png',lena_new_sz)5.3直接保存array

读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失

np.save('lena_new_sz',lena_new_sz)#会在保存的名字后面自动加上.npyimg=np.load('lena_new_sz.npy')#读取前面保存的数组

fromPILimportImageim=Image.open('lena.png')im.show()2.将PILImage图片转换为numpy数组im_array=np.array(im)#也可以用np.asarray(im)区别是np.array()是深拷贝,np.asarray()是浅拷贝3.保存PIL图片直接调用Image类的save方法

fromPILimportImageI=Image.open('lena.png')I.save('new_lena.png')4.将numpy数组转换为PIL图片这里采用matplotlib.image读入图片数组,注意这里读入的数组是float32型的,范围是0-1,而PIL.Image数据是uinit8型的,范围是0-255,所以要进行转换:

importmatplotlib.imageasmpimgfromPILimportImagelena=mpimg.imread('lena.png')#这里读入的数据是float32型的,范围是0-1im=Image.fromarray(np.uinit8(lena*255))im.show()5.RGB转换为灰度图fromPILimportImageI=Image.open('lena.png')I.show()L=I.convert('L')L.show()

THE END
1.第一课画图片方法画飞机方阵 现有一个如图所示的飞机方阵,方阵由大中小三类型的敌飞机组成,其中大飞机1架,中飞机三架,小飞机5架,若想要完成如图所示效果需要使用blit方法在画布上画出相应的图片,在花图片之前需要确定每架飞机的坐标位置。 注:小飞机每架飞机之间相隔60 https://www.jianshu.com/p/7d05dc57f129
1.python绘制图像python画图代码pvalue=[21,20,18,13,7,34] width=0.60 index=np.arange(len(cell)) p1=np.arange(0, len(cell),0.01) p2=0.05+p1*0 q1=np.arange(0, len(cell),0.01) q2=0.1+p1*0 figsize=(10,8) # 调整绘制图片的比例 plt.plot(p1, p2, color='red', label='5% significance level') # 绘制直线 ...https://blog.csdn.net/lixiaofeng0/article/details/142560955
2.手把手教你基于Python实现简单绘图腾讯云开发者社区控制海龟速度:可以使用t.speed(speed)方法设置海龟移动的速度,速度值范围为 1-10。 关闭画布:在程序结束时,可以使用screen.bye()或turtle.done()方法关闭画布。 从画一个小星星说起 代码语言:python 代码运行次数:0 复制 Cloud Studio代码运行 importturtle# 创建画布和海龟screen=turtle.Screen()t=turtle.Turtle...https://cloud.tencent.com/developer/article/2376318
3.python在excel绘图库python如何在excel中画图注意一个Python会话只能使用一次plt.show(),通常放在脚本最后;多个plt.show()会导致异常怎样用python画弧形花瓣。 在Ipython shell中画图 在Ipython shell中启动Matplotlib模式后,就不需要使用plt.show(). 此后任何plt命令都会自动打开一个图形窗口,增加新命令,图形就会更新。 https://blog.51cto.com/u_16213616/11731996
4.使用matplotlib.pyplot绘制多个图片和图表实现方式python您可能感兴趣的文章: matplotlib.pyplot画图 图片的二进制流的获取方法 matplotlib之Pyplot模块绘制三维散点图使用颜色表示数值大小 如何在Python中利用matplotlib.pyplot画出函数图详解 Python利用matplotlib.pyplot.boxplot()绘制箱型图实例代码 如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图微信...https://www.jb51.net/python/2955600jq.htm
5.如何在图片中隐藏信息?Python3实现图片隐写术(python画隐函数图像...在这里 bin() 的作用是将一个 int 值转换为二进制字符串,详见: https://docs.python.org/3/library/functions.html#bin decodeImage() 返回图片解码后的隐藏文字,其接受一个图片对象参数。 def decodeImage(image): pixels = list(image.getdata()) # 获得像素列表 binary = ''.join([str(int(r>>1<<...https://www.huoban.com/news/post/19097.html
6.turtle先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。 Turtle star 使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。 在Python 中,海龟绘图提供了一个实体“海龟”...https://docs.python.org/zh-cn/dev/library/turtle.html
7.成都东软学院主要的教学内容有:中国山水画发展史概述、山石的画法、树的画法、水的表现方法、构图以及山水小品临摹。通过教学使学生了解中国山水绘画史的源流和发展,真正理解中国古代传统山水中的文人精神,掌握基本的山水画绘画技法,通过对两宋山水画的欣赏和临习领略我国壮丽山河之美,继承传统的文人审美情趣,进一步坚定中华民族的...https://sz.nsu.edu.cn/2021/03BC4DBE-3F25-4596-8F7B-325F2BDE0EA5.html