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

标签 python opencv matplotlib jupyter-notebook imshow

我有一个非常高分辨率(3311, 4681, 3)的图像,我想使用 opencv 在我的 jupyter 笔记本中显示它,但正如其他答案所述,不可能在中使用 cv2.imshow jupyter 笔记本,所以我使用 plt.imshow 来做同样的事情,但问题是如果我想显示更大的图像,我必须定义Fig_size参数。如何在 jupyter Notebook 中以其原始分辨率读取图像,或者是否可以在另一个窗口中打开图像?

这是我尝试过的:

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 笔记本或另一个窗口中以其原始分辨率显示。

最佳答案

您可以通过计算相应的图形尺寸以原始分辨率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()

以大分辨率打印它,但缺点是轴标签与大图像相比很小。您可以通过将其他 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
...
<小时/>

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

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

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

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

关于python - 在 jupyter 笔记本中以原始分辨率显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60144693/

相关文章:

python - 调用 plt.show() 后如何保持之前的图而不清除图形而不简单地重复调用?

python - 我可以用 python 在我自己的网络中广播特定消息吗?

python - 使用 MySQL 与 SQLite 时查询返回不同的数据

c++ - OpenCV(C++)中的背景减法

opencv - 如何获得二进制图像中四边形的角

python - semilogx Python 图中 x 轴上的更多刻度

python - 在两个 TKinter "pages"中使用 FigureCanvasTkAgg

python - 我正在尝试计算字母数字列表的总和

python - 如何修复这个 NumPy loadtxt 函数?

opencv - OpenCV中的坐标转换