在 jupyter 笔记本中以原始分辨率显示图像

Him*_*dar 9 python opencv matplotlib imshow jupyter-notebook

我有一个非常高分辨率(3311, 4681, 3)的图像,我想使用 opencv 在我的 jupyter 笔记本中显示它,但正如其他答案所述,它不可能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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以基本上我希望我的图像在 jupyter 笔记本或另一个窗口中以其原始分辨率显示。

geh*_*eis 9

您可以imshow通过计算相应的图形大小来获得图像的原始分辨率,该大小取决于 matplotlib 的 dpi(每英寸点数)值。默认值为 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()
Run Code Online (Sandbox Code Playgroud)

以大分辨率打印它,但缺点是轴标签与大图像相比很小。您可以通过将其他值设置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
...
Run Code Online (Sandbox Code Playgroud)

您在另一个窗口中打开图像的第二个建议将像这样工作,您使用 Ipython magic 命令更改 matplotlib 后端,方法是%matplotlib inline在上面的示例中替换为,例如

%matplotlib qt         # opens the image in an interactive window with original resolution
Run Code Online (Sandbox Code Playgroud)

或者

%matplotlib notebook    # opens the image in an interactive window 'inline'
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多后端可能性。请注意,原始图形尺寸的计算也必须事先完成。