【问题标题】:How to write multiple images (subplots) into one image如何将多个图像(子图)写入一张图像
【发布时间】:2019-01-24 07:43:26
【问题描述】:

我有两张图片想保存为一张图片中的子图。

我当前的代码可以很好地将它们显示为子图。

import cv2 as cv
from matplotlib import pyplot as plt
image1 = cv.imread('someimage')
image2 = cv.imread('anotherimage')
plt.subplot(1, 2, 1), plt.imshow(image1, 'gray')
plt.subplot(1, 2, 1), plt.imshow(image2, 'gray')
plt.show()

OpenCV imwrite 不能以其简单的形式工作,因为它需要一个图像作为输入。我想将这些子图保存在一张图像中以供以后进行视觉分析。我怎样才能做到这一点?

它可以并排或叠放在一起。只是一个例子:)

该示例仅用于演示目的。我应该能够像创建子图(x,y)一样将多个图像保存到一个图像中。例如,

【问题讨论】:

    标签: python python-3.x opencv matplotlib


    【解决方案1】:

    仅针对其他读者: 可以简单地使用 matplotlib.pyplot.savefig。它完全按照 plt.show() 的显示方式保存子图。

    https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig

    对于两张图片,我猜其他两个答案也可以使用。

    结果代码应如下所示:

    import cv2 as cv
    from matplotlib import pyplot as plt
    image1 = cv.imread('someimage')
    image2 = cv.imread('anotherimage')
    plt.subplot(1, 2, 1), plt.imshow(image1, 'gray')
    plt.subplot(1, 2, 2), plt.imshow(image2, 'gray')
    plt.savefig('final_image_name.extension') # To save figure
    plt.show() # To show figure
    

    【讨论】:

      【解决方案2】:
      import cv2 as cv
      from matplotlib import pyplot as plt
      image1 = cv.imread('someimage')
      image2 = cv.imread('anotherimage') 
      final_frame = cv.hconcat((image1, image2)) # or vconcat for vertical concatenation
      cv.imwrite("image.png", final_frame)
      

      【讨论】:

      • 是否可以将其应用于多个图像?我有时有超过两张图片,我想保存到一张图片中。所以有点需要通用的解决方案。
      • 我猜你可以把连接放到一个迭代循环中,只要它们是相同的维度
      • 找到了解决方案,我可以使用 savefig。
      • @utengr 你能扩展一下吗?我也在寻找任何简单的解决方案。
      【解决方案3】:

      您可以为此使用numpy.concatenate

      import numpy as np
      import cv2
      image1 = cv.imread('someimage')
      image2 = cv.imread('anotherimage')
      final = np.concatenate((image1, image2), axis = 0)
      cv2.imwrite('final.png', final)
      

      axis = 0 垂直连接图像

      axis = 1 水平拼接图片

      【讨论】:

      • 是否可以将其应用于多个图像?我有时有超过两张图片,我想保存到一张图片中。所以有点需要通用的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2016-11-23
      • 2022-07-01
      • 2014-07-18
      • 2011-07-04
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      相关资源
      最近更新 更多