我正在使用带有OpenCV的python 2.7来处理Ubuntu 我想在同一个窗口中显示4个图像。 因为opencv没有任何功能,我会尝试制作一个。 我在Stack Overflow中搜索过,我发现了一些复杂的解决方案但是用C / C ++生成,我不知道。
所以,我的策略是: 我有4种颜色的BGR图像。全部4个相同尺寸:(x,y) 我将生成一个numpy数组,其大小是原始图像的4倍(2x,2y) 我会将每个图像复制到numpy零数组中,但位于不同的位置,因此它们会将每个图像看作另一个图像:
import cv2
import numpy as np
def ShowManyImages():
img1 = cv2.imread('img1.png',1)
img2 = cv2.imread('img2.png',1)
img3 = cv2.imread('img3.png',1)
img4 = cv2.imread('img4.png',1)
x,y,_ = img1.shape
print x, y # show: 500,500
img_final = np.zeros((x*2, y*2, 3), np.uint8)
print img_final.shape # show: 1000,1000,3
img_final[0:500,0:500,:] = img1[:,:,:]
cv2.imshow('final', img_final)
cv2.waitKey()
cv2.destroyAllWindows()
ShowManyImages()
但是,代码不显示任何图像。我无法弄清楚为什么。有什么想法吗?
注意:为了缩短代码,我只显示第一个img(img1)的代码
答案 0 :(得分:1)
这是一种方法,很少stack
次操作假定a0,a1,a2,a3
为四个3D
(RGB)图像数组 -
a01 = np.hstack((a0,a1))
a23 = np.hstack((a2,a3))
out = np.vstack((a01, a23))
示例运行 -
In [245]: a0 = np.random.randint(0,9,(2,3,3))
...: a1 = np.random.randint(0,9,(2,3,3))
...: a2 = np.random.randint(0,9,(2,3,3))
...: a3 = np.random.randint(0,9,(2,3,3))
...:
In [246]: a01 = np.hstack((a0,a1))
...: a23 = np.hstack((a2,a3))
...: out = np.vstack((a01, a23))
...:
In [247]: out.shape
Out[247]: (4, 6, 3)
因此,我们会将它们堆叠起来 -
a0 | a1
-------
a2 | a3