如何将numpy.zeros数组可视化为RGB图像?

时间:2017-04-27 21:33:37

标签: python opencv numpy

我正在使用带有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)的代码

1 个答案:

答案 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