我有一个非常高分辨率(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笔记本或其他窗口中显示。
答案 0 :(得分:3)
您可以通过计算相应的图形大小来imshow
以原始分辨率matplotlib.rcParams['figure.dpi']
,该图形大小取决于matplotlib的dpi(每英寸点数)值。默认值为100 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 inline
您在第二个窗口中打开图像的第二条建议将像这样工作,即您使用Ipython magic命令更改了matplotlib后端,方法是将上述示例中的%matplotlib qt # opens the image in an interactive window with original resolution
替换为例如
%matplotlib notebook # opens the image in an interactive window 'inline'
或
{{1}}
有关更多的后端可能性,请参见here。请注意,还必须先计算原始图形的大小。
答案 1 :(得分:0)
为了以完整的原始分辨率显示图像,
您也可以使用PIL
from PIL import Image
img = Image.open(r'0261b27431-07_D_01.jpg')
img