如何将多个图像(子图)写入一个图像

时间:2018-08-17 09:33:04

标签: python python-3.x opencv matplotlib

我有两张图像,我想另存为子图。

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

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无法以其简单的形式工作,因为它期望输入一个图像。我想将这些子图保存在一张图像中,以便以后进行视觉分析。我该如何实现?

它可以并排或彼此重叠。只是一个例子:)

Two images in one

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

enter image description here

3 个答案:

答案 0 :(得分:3)

仅针对其他读者: 一个人可以简单地使用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

答案 1 :(得分:1)

您可以为此目的使用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水平合并图像

答案 2 :(得分:1)

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)