其他分享
首页 > 其他分享> > 如何正确地将3d数组转换为连续的rgb字节

如何正确地将3d数组转换为连续的rgb字节

作者:互联网

我正在尝试将cv2.imread返回的3d数组转换为连续的rgb字节数组,以便在GTK中显示.以下是我的转换代码:

def ndarr2rgb(img):
    r_arr = img[:, :, 0].ravel()    # read channel
    g_arr = img[:, :, 1].ravel()    # green channel
    b_arr = img[:, :, 2].ravel()    # blue channel
    numItems = img.shape[0] * img.shape[1] * img.shape[2]   # number of entries in byte array
    z = img.shape[2]                # z dimension, always equal to 3
    arr = np.zeros((numItems, 1))
    # to fill the byte array with r,g,b channel
    for i in xrange(0, numItems):
        if i % z == 0:
            arr[i] = r_arr[i/z]
        if i % z == 1:
            arr[i] = g_arr[i/z]
        if i % z == 2:
            arr[i] = b_arr[i/z]
    return arr

因此,在我的代码中,我首先将三个维度分别放入r_arr,g_arr,b_arr,然后我将值或RGB中的值放入’arr’中.所以在迭代之后,数组’arr’将像’r0,g0,b0,r1,g1,b1,……’

然后我使用“GdkPixbuf.Pixbuf.new_from_data”函数从上面的“ndarr2rgb”函数返回的arr中获取pixbuf.我使用“image.set_from_pixbuf”来显示图像.但是我得到了以下结果:

这就像有一些嘈杂的区域,所以请帮我解决我的问题,thx.

解决方法:

做就是了:

all_in_one_row = np.reshape(img,(-1))

标签:python,opencv,gtk,pygobject,pygtk
来源: https://codeday.me/bug/20190825/1715122.html