python如何实现读取并显示图片(不需要图形界面)

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

一、matplotlib

1. 显示图片

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np

lena = 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 图转换为灰度图,可以根据公式自定义一个:

def rgb2gray(rgb):
 return np.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

from scipy import misc
lena_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 保存为图像

from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)

5.3 直接保存 array

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

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

二、PIL

1. 显示图片

from PIL import Image
im = Image.open('lena.png')
im.show()

2. 将 PIL Image 图片转换为 numpy 数组

im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

3. 保存 PIL 图片

直接调用 Image 类的 save 方法

from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')

4. 将 numpy 数组转换为 PIL 图片

这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换:

import matplotlib.image as mpimg
from PIL import Image
lena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1
im = Image.fromarray(np.uinit8(lena*255))
im.show()

5. RGB 转换为灰度图

from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()

以上就是本文的全部内容,希望对大家的学习有所帮助

到此这篇关于python如何实现读取并显示图片(不需要图形界面)的文章就介绍到这了,更多相关Python 读取并显示图片内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python PIL和CV对 图片的读取,显示,裁剪,保存实现方法

    PIL 图片操作 读取图片 img = Image.open("a.jpg") 显示图片 im.show() # im是Image对象,im是numpy类型,通过Image.fromarray(nparr, mode='RGB')函数转换为Image对象 图片的size (width, height) = img.size 图片的模式 mode = img.mode 截区域 img_c = img.crop(x1,y1,x2,y2) 裁剪图片 img = img.resize((siz

  • python读取目录下所有的jpg文件,并显示第一张图片的示例

    如下所示: # -*- coding: UTF-8 -*- import numpy as np import os from scipy.misc import imread, imresize import matplotlib.pyplot as plt from glob import glob # 读取目录下所有的jpg图片 def load_image(image_path, image_size): file_name=glob(image_path+"/*jpg") s

  • opencv python 图片读取与显示图片窗口未响应问题的解决

    显示图像是 Opencv最基本的操作之一, imshow()函数可以实现该操作.如果使用过其他GUI框架背景,就会很自然地调用 imshow来显示一幅图像.但这个观点并不完全正确,因为图像确实会显示出来,但随即会消失. 例如下面代码: import cv2 import numpy as np img = cv2.imread('C://Users/yefci/Pictures/0.2.jpg') cv2.imshow('C://Users/yefci/Pictures/0.2.jpg',img

  • python 读取二进制 显示图片案例

    我就废话不多说了,大家还是直接看代码吧! import matplotlib.pyplot as plt import numpy as np f = open('bwall.bmpx', mode='rb') x = np.fromfile(f, dtype=np.ubyte) #x = x[0:1920] x = x[1920:3840] #x = x[3840:5760] x = x.reshape(60,32) #print((x)) plt.imshow(x) plt.axis('of

  • python如何实现读取并显示图片(不需要图形界面)

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. 显示图片 import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np lena = mpimg.imread('lena.png')

  • python读取并显示图片的三种方法(opencv、matplotlib、PIL库)

    前言 在进行图像处理时,经常会用到读取图片并显示出来这样的操作,所以本文总结了python中读取并显示图片的3种方式,分别基于opencv.matplotlib.PIL库实现,并给出了示例代码,介绍如下. OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口

  • python spyder中读取txt为图片的方法

    有时候需要将一个环境中的图片可视化,但是可能这个环境下不方便,因此需要将这个环境下的图像数据保存下来,然后在另一个环境下查看,比如,有一个图像数据,image.txt,里面的数据是图像的像素值,范围是0-255,像素值之间以空格键分开,行与行之间是回车键分开,那么在Python Spyder环境下通过简单的几条语句就搞定: import numpy from skimage import io image = numpy.loadtxt("image.txt") io.imshow(i

  • python opencv 实现读取、显示、写入图像的方法

    opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法,值得学习和深究下. opencv包安装 · 这里直接安装opencv-python包(非官方): pip install opencv-python 官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/ 1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方

  • python从sqlite读取并显示数据的方法

    本文实例讲述了python从sqlite读取并显示数据的方法.分享给大家供大家参考.具体实现方法如下: import cgi, os, sys import sqlite3 as db conn = db.connect('test.db') cursor = conn.cursor() conn.row_factory = db.Row cursor.execute("select * from person") rows = cursor.fetchall() sys.stdout

  • python在新的图片窗口显示图片(图像)的方法

    使用python画图,发现生成的图片在console里.不仅感觉很别扭,很多功能也没法实现(比如希望在一幅图里画两条曲线). 想像matlab一样单独地生成一个图片窗口,然后我在网上找了一个多小时,都没有找到想要的,要么仅仅是画图的教程,要么就是问题提出了,也没人回答. 我记得曾经我使用过一行代码,可以实现这个功能的.最后果然在History log里面找到了: %matplotlib qt5 显示图像于新生成的一个图片窗口 %matplotlib inline 在console中显示 以上这篇

  • python实现视频读取和转化图片

    1)视频读取 import cv2 cap = cv2.VideoCapture('E:\\Video\\20000105_224116.dav') #地址 while(True): ret,frame = cap.read() if(ret): # gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.imshow('input',frame) else: break if cv2.waitKey(1)==27: break cap.release

  • python实现读取并显示图片的两种方法

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. 显示图片 import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np lena = mpimg.imread('lena.png')

  • python中ImageTk.PhotoImage()不显示图片却不报错问题解决

    发现问题 今天在使用ImageTk.photoImage()显示图片时,当把包含该函数放在自定义函数里时,不能正常显示,移到函数为又可正常显示,所以想到可能是变量不是全局性的缘故,改为全局变量后果然可正常显示,下面贴出前后代码对比 示例代码 ImageTk.photoImage()在自定义函数外使用(正常显示): ImageTk.photoImage()在自定义函数内使用(无法显示): ImageTk.photoImage()在自定义函数内使用(正常显示): 完整代码: 总结 以上就是这篇文章的

随机推荐