Отображение изображения с увеличением = 1 с помощью Matplotlib imshow () (как?) - PullRequest
24 голосов
/ 09 ноября 2011

Я хочу отобразить изображение (скажем, 800x800) с помощью функции Matplotlib.pyplot imshow (), но я хочу отобразить его так, чтобы один пиксель изображения занимал один пиксель на экране (коэффициент масштабирования = 1, без сжатия, нет растягивать). * * тысяча один

Я новичок, так вы знаете, как поступить?

Ответы [ 2 ]

24 голосов
/ 09 ноября 2011

Matplotlib не оптимизирован для этого. Вам было бы немного лучше с более простыми опциями, если вы просто хотите отображать изображение с разрешением один пиксель в один пиксель. (Взгляните, например, на Tkinter.)

То, что было сказано:

import matplotlib.pyplot as plt
import numpy as np

# DPI, here, has _nothing_ to do with your screen's DPI.
dpi = 80.0
xpixels, ypixels = 800, 800

fig = plt.figure(figsize=(ypixels/dpi, xpixels/dpi), dpi=dpi)
fig.figimage(np.random.random((xpixels, ypixels)))
plt.show()

Или, если вы действительно хотите использовать imshow, вам нужно быть более многословным. Однако это имеет то преимущество, что позволяет вам увеличивать изображение и т. Д. При желании.

import matplotlib.pyplot as plt
import numpy as np

dpi = 80
margin = 0.05 # (5% of the width/height of the figure...)
xpixels, ypixels = 800, 800

# Make a figure big enough to accomodate an axis of xpixels by ypixels
# as well as the ticklabels, etc...
figsize = (1 + margin) * ypixels / dpi, (1 + margin) * xpixels / dpi

fig = plt.figure(figsize=figsize, dpi=dpi)
# Make the axis the right size...
ax = fig.add_axes([margin, margin, 1 - 2*margin, 1 - 2*margin])

ax.imshow(np.random.random((xpixels, ypixels)), interpolation='none')
plt.show()
4 голосов
/ 20 июля 2017

Если вам на самом деле не нужен matlibplot, вот лучший способ для меня

import PIL.Image
from io import BytesIO
import IPython.display
import numpy as np
def showbytes(a):
    IPython.display.display(IPython.display.Image(data=a))

def showarray(a, fmt='png'):
    a = np.uint8(a)
    f = BytesIO()
    PIL.Image.fromarray(a).save(f, fmt)
    IPython.display.display(IPython.display.Image(data=f.getvalue()))

использовать showbytes() для отображения строки байтов изображения и showarray() для отображения массива numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...