gpt4 book ai didi

python - matplotlib opencv 图像子图

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:05 24 4
gpt4 key购买 nike

在全局 matplotlib 图形中,我想要一些不同大小的子图。例如,一个子图应该是从 opencv2(网络摄像头)捕获的帧的精确大小,另一个应该是从该帧获得的较小图像。

我有两个不同的问题,都与尺寸有关:

  1. 我知道我可以指示 plt.figure 的 figSize,但是如何为每个子图设置不同的子图大小 (fig.add_subplot)?
  2. 来自 opencv 的帧带有像素,我怎样才能使子图显示完全相同的图像(大小),特别是因为 matplotlib 使用英寸作为尺寸?

获取框架:

import cv2
import matplotlib.pyplot as plt

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

构建图和子图:

fig = plt.figure()
img = fig.add_subplot(121)
img2 = fig.add_subplot(122)

然后将框架放入子图中

img.imshow(frame) #this should be the original size of captured frame
#take out a square of the frame, and plot with box dimensions
#img2.imshow(box)

干杯!

------ 编辑 ------

虽然我将使用网络摄像头拍摄图像,但我的问题的核心如下:1.用opencv打开图片2. 将图像绘制成子图,与opencv读取的图像具有相同的尺寸

代码:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('flower.jpg')
cv2.imshow('img',img)

fig = plt.figure()
video_plot = plt.subplot2grid((10, 10), (0, 0)) #Here I need to specify the same size as original
video = video_plot.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

cv2.waitKey(0)
cv2.destroyAllWindows()

plt.show()

原图256x256,用opencv打开读取

enter image description here

较小的图像,如果我省略 colspan 和 rowspan (=1) plt.subplot2grid((10, 10), (0, 0))

enter image description here

更大的图像,如果我最大化 colspan 和 rowspan: plt.subplot2grid((10, 10), (0, 0), colspan=10, rowspan=10)

enter image description here

综上所述,如何绘制相同尺寸的图像?

最佳答案

图形尺寸确实以英寸为单位指定。每英寸点数 (dpi) 也在 matplotlib 中指定。

知道以英寸为单位的图形大小和 dpi,您可以通过将像素除以 dpi 和图形大小来定位图形坐标中的轴(从 0 到 1)。例如。为了将坐标轴放置在距左下角 50 像素的位置,您可以将坐标轴放置在

fig.add_axes([50./dpi/figsize[0], 50./dpi/figsize[1], ...])

宽度和高度类似地由每个方向上的像素数除以 dpi 和图形大小(以英寸为单位)确定。

完整示例:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)

ar = np.random.poisson(lam=10, size=(250,300))
cut = ar[50:100, 200:250]; print cut.shape
dpi=100. # dots per inch
figsize=(5, 3.5)
fig = plt.figure(figsize=figsize)

ax = fig.add_axes([50./dpi/figsize[0],50./dpi/figsize[1],
ar.shape[1]/dpi/figsize[0],ar.shape[0]/dpi/figsize[1]])
im = ax.imshow(ar)

ax2 = fig.add_axes([100./dpi/figsize[0]+ar.shape[1]/dpi/figsize[0],50./dpi/figsize[1],
cut.shape[1]/dpi/figsize[0],cut.shape[0]/dpi/figsize[1]])
im2 = ax2.imshow(cut)

ax.axis("off")

plt.show()

enter image description here

关于python - matplotlib opencv 图像子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43372792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com