使用Python显示图像


107

我尝试将IPython.display与以下代码结合使用:

from IPython.display import display, Image
display(Image(filename='MyImage.png'))

我还尝试通过以下代码使用matplotlib:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
plt.imshow(mpimg.imread('MyImage.png'))

在这两种情况下,都不会显示任何内容,甚至不会显示错误消息。

Answers:


210

如果您正在使用matplotlib并希望在交互式笔记本中显示图像,请尝试以下操作:

%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('your_image.png')
imgplot = plt.imshow(img)
plt.show()

谢谢您的回答,它几乎可以用:-)显示图像,但使用火炉代替了灰度。任何想法?
FiReTiTi

3
尝试显式定义颜色图:plt.imshow(lum_img,cmap =“ grey”)
Joe Bathelt

3
以我的理解,最后一个plt.show()命令产生显示。在此之前,您可以添加到绘图中,例如通过在图像上添加图层。我建议将matplotlib图像教程作为参考:matplotlib.org/users/image_tutorial.html
Joe Bathelt 2016年

5
感谢您的回答,现在可以正常使用了!对于潜在读者而言,只是一些细节,它是“灰色”而不是“灰色”。
FiReTiTi

不,灰色是正确的原始拼写。灰色已被英语的某些偏差所采用,因此在美国等国家更为普遍。
perfo

39

如果使用matplotlib,则plt.show()除非您不在交互模式下,否则需要使用显示图像。例如:

plt.figure()
plt.imshow(sample_image) 
plt.show()  # display it

阅读另一个答案,我只知道必须在已有的代码之后添加plt.show(),而不是替换imshow。谢谢你的帮助。
FiReTiTi

我认为,与接受的答案相比,这完全可以回答问题。
Prasad Raghavendra

23

您可以用一种更简单的方法来完成

from PIL import Image

image = Image.open('image.jpg')
image.show()

1
感谢您的帮助。我已经安装了PIL,现在可以使用了。知道为什么我尝试的两种方法都无效吗?
FiReTiTi

如果无法安装PIL(对我来说就是这种情况),请尝试Pillow,它对我来说就像是一种魅力。
mrk

1
我想知道这import Image句话是如何工作的。不是from PIL import Image吗?
Laszlo Treszkai

此解决方案不一定关闭文件描述符。而是将其与上下文管理器一起使用:with Image.open('image.jpg') as im: im.show()
Laszlo Treszkai

这是什么Image包裹?
路易·杨

7

使用opencv-python可以更快地对图像进行更多操作:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpg')
im_resized = cv2.resize(im, (224, 224), interpolation=cv2.INTER_LINEAR)

plt.imshow(cv2.cvtColor(im_resized, cv2.COLOR_BGR2RGB))
plt.show()


4

你的第一个建议对我有用

from IPython.display import display, Image
display(Image(filename='path/to/image.jpg'))

如果还有其他图,它将始终首先显示,为什么?
Christos Karapapas

1
不确定。我不是ipython专家。从这里的答案中可以看到,有几种显示图像的方法。
哈里·莫雷诺

3

使用Jupyter Notebook,代码可以像下面这样简单。

%matplotlib inline
from IPython.display import Image
Image('your_image.png')

有时您可能希望在for循环中显示一系列图像,在这种情况下,您可能希望合并displayImage使其工作。

%matplotlib inline
from IPython.display import display, Image
for your_image in your_images:
    display(Image('your_image'))

2

您的代码:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

应该是什么:

plt.imshow(mpimg.imread('MyImage.png'))
File_name = mpimg.imread('FilePath')
plt.imshow(FileName)
plt.show()

plt.show()除非您在Jupyter笔记本中,否则您会错过一个,否则其他IDE不会自动显示绘图,因此您plt.show()每次都要显示绘图或在后续代码中对现有绘图进行更改时都必须使用。


1
import IPython.display as display
from PIL import Image
image_path = 'my_image.jpg'
display.display(Image.open(image_path))

1

具有任意数量图像的Jupyter笔记本PIL图像可视化解决方案:

def show(*imgs, **kwargs):
    '''Show in Jupyter notebook one or sequence of PIL images in a row. figsize - optional parameter, controlling size of the image.
    Examples:
    show(img)
    show(img1,img2,img3)
    show(img1,img2,figsize=[8,8])
    '''
    
    if 'figsize' not in kwargs:
        figsize = [9,9]
    else:
        figsize = kwargs['figsize']
    
    fig, ax = plt.subplots(1,len(imgs),figsize=figsize)
    if len(imgs)==1:
        ax=[ax]
    
    for num,img in enumerate(imgs):
        ax[num].imshow(img)
        ax[num].axis('off')
        
    tight_layout()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.