如何解决在for循环中使用imshow方法来打印多张图像
我有一个简单的二维numpy数组,它是灰度图像的像素图。我正在尝试打印图像的某些部分。我的代码是
from google.colab import drive
drive.mount('/content/drive')
import numpy as np
import matplotlib.pyplot as plt
import cv2
img = cv2.imread('/content/drive/My Drive/Colab Notebooks/sample2.jpg') # the source file is correctly mounted
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
和
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')
i += 1
例如,如果roi = [10,40,50,100]
,则应打印图像的两部分。但是当我运行上面的单元格时,它只打印一张图像,这是图像的最后一部分。是否可以不覆盖其他图像并全部打印?
解决方法
您应该尝试在每个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])
最后一个示例将绘制水平排列的图像:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。