为了账号安全,请及时绑定邮箱和手机立即绑定

在 for 循环中使用 imshow 方法打印多个图像

在 for 循环中使用 imshow 方法打印多个图像

紫衣仙女 2023-07-18 15:20:45
我有一个简单的 2d numpy 数组,它是灰度图像的像素图。我正在尝试打印图像的某些部分。我的代码是from google.colab import drivedrive.mount('/content/drive')import numpy as npimport matplotlib.pyplot as pltimport cv2img = cv2.imread('/content/drive/My Drive/Colab Notebooks/sample2.jpg') # the source file is correctly mountedimg_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)和i = 0while i < (len(roi) - 1): # roi is a list of strictly increasing positive integers   print(roi[i], roi[i+1])  plt.imshow(img_gray[roi[i]:roi[i+1]], cmap='gray')  i += 1例如,如果roi = [10, 40, 50, 100],它应该打印图像的两个部分。但是当我运行上面的单元格时,它只打印一张图像,即图像的最后一部分。是否可以不覆盖其他图像并将其全部打印?
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

您应该尝试plt.show()在每个之后调用plt.imshow(...):


i = 0

while i < (len(roi) - 1): # roi is a list of strictly increasing positive integers 

  print(roi[i], roi[i+1])

  plt.imshow(img_gray[roi[i]:roi[i+1]], cmap='gray')

  plt.show() # <----- this will show all plots

  i += 1

或者,如果你想保留一个更好、更有组织的图,你可以使用子图,尽管你应该说明你想要多少个子图,下面是一个随机输入的示例:


import matplotlib.pyplot as plt

import numpy as np


ims = np.random.randn(3, 224, 224)


fig, ax = plt.subplots(1, 3)

for i in range(3):

    ax[i].imshow(ims[i])

最后一个示例将绘制水平排列的图像:

//img1.sycdn.imooc.com//64b63d75000122a504050149.jpg

查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信