【问题标题】:show image in its original resolution in jupyter notebook在 jupyter notebook 中以原始分辨率显示图像
【发布时间】:2020-05-25 10:25:42
【问题描述】:

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

所以基本上我希望我的图像在 jupyter notebook 或其他窗口中以原始分辨率显示。

【问题讨论】:

    标签: python opencv matplotlib jupyter-notebook imshow


    【解决方案1】:

    你可以imshow通过计算相应的图形大小来以原始分辨率的图像,这取决于matplotlib的dpi(每英寸点数)值。默认值为 100 dpi,存储在matplotlib.rcParams['figure.dpi']

    所以imshowing 像这样的图像

    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 魔术命令更改 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。请注意,原始图形大小的计算也必须在之前完成。

    【讨论】:

    • 第二个,那个plt.show或者cv2.imshow应该用什么?
    • @HimanshuPoddar 还有plt.show()。您只需将 %matplotlib inline 魔法替换为我的答案中列出的魔法之一。示例的其余部分保持不变。
    • 窗口开得还小,要放大才能看大图
    • 您是否也按照我的答案上半部分所述执行了图形大小和plt.figure(figsize=figsize)之前的确定?
    【解决方案2】:

    为了以完整的原始分辨率显示图像, 你也可以使用PIL

    from PIL import Image
    img = Image.open(r'0261b27431-07_D_01.jpg')
    img
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多