показать изображение в оригинальном разрешении в блокноте jupyter - PullRequest
1 голос
/ 10 февраля 2020

У меня есть изображение с очень высоким разрешением (3311, 4681, 3), которое я хочу показать в своем блокноте jupyter с помощью opencv, но, как указано в других ответах, невозможно использовать cv2.imshow в блокноте jupyter, поэтому я использовал plt.imshow, чтобы сделать то же самое, но проблема в том, что я должен определить параметр fig_size, если я хочу, чтобы мое изображение было больше. Как я могу прочитать изображение в оригинальном разрешении в блокноте Jupyter или можно открыть изображение в другом окне?

Это то, что я пробовал:

import cv2
from matplotlib import pyplot as plt
%matplotlib inline

img = cv2.imread(r"0261b27431-07_D_01.jpg")
plt.figure(figsize= (20,20))
plt.imshow(img)
plt.show()

enter image description here

Поэтому я хочу, чтобы мое изображение отображалось в исходном разрешении в блокноте Jupyter или в другом окне.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете imshow изображение в исходном разрешении, рассчитав соответствующий размер рисунка, который зависит от значения dp (точек на дюйм) для matplotlib. Значение по умолчанию - 100 dpi, и оно сохраняется в matplotlib.rcParams['figure.dpi'].

. Таким образом, imshow при таком изображении

import cv2
from matplotlib import pyplot as plt
import matplotlib 
%matplotlib inline

# Acquire default dots per inch value of matplotlib
dpi = matplotlib.rcParams['figure.dpi']

img = cv2.imread(r'0261b27431-07_D_01.jpg')

# Determine the figures size in inches to fit your image
height, width, depth = img.shape
figsize = width / float(dpi), height / float(dpi)

plt.figure(figsize=figsize)
plt.imshow(img)
plt.show()

печатает его в большом разрешении, но с недостатком: что метки оси крошечные по сравнению с большим изображением. Вы можете обойти это, установив другие rcParams на более высокие значения, например

# Do the same also for the 'y' axis
matplotlib.rcParams['xtick.labelsize'] = 50
matplotlib.rcParams['xtick.major.size'] = 15
matplotlib.rcParams['xtick.major.width'] = 5
...

Ваше второе предложение открыть изображение в другом окне будет работать следующим образом: вы меняете бэкэнд matplotlib с помощью I python magi c команды, заменив %matplotlib inline в приведенном выше примере, например,

%matplotlib qt         # opens the image in an interactive window with original resolution

или

%matplotlib notebook    # opens the image in an interactive window 'inline'

См. здесь для дополнительной информации о бэкэнде possibilites. Обратите внимание, что расчет исходного размера фигуры также должен быть выполнен до этого.

...