我有一个非常高分辨率(3311,4681,3)的图像,我想使用opencv在我的jupyter笔记本中显示它,但由于其他答案表明它无法在jupyter笔记本中使用cv2.imshow
,所以我使用了[ 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()
所以基本上我希望我的图像以原始分辨率在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 inline
替换为例如来更改matplotlib后端,>
%matplotlib qt # opens the image in an interactive window with original resolution
或
%matplotlib notebook # opens the image in an interactive window 'inline'
请参阅here了解更多后端可能性。请注意,还必须先计算原始图形的大小。