Wie man ein 3D-Array korrekt in zusammenhängende RGB-Bytes umwandelt
Ich versuche zuKonvertieren Sie das von cv2.imread zurückgegebene 3d-Array in das zusammenhängende rgb-Byte-Array, um in GTK anzuzeigen. Und unten ist mein Umrechnungscode:
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
Also bekomme ich in meinem Code zuerst die drei Dimensionen getrennt in r_arr, g_arr, b_arr, dann setze ich die Werte in der Reihenfolge oder RGB in das 'arr'. Nach der Iteration lautet das Array 'arr' wie folgt: 'r0, g0, b0, r1, g1, b1, ...'
Und dann benutze ich "GdkPixbuf.Pixbuf.new_from_datamsgstr "Funktion, um den Pixbuf aus dem Arr zu bekommen, der von der"ndarr2rgb"Funktion oben. Und ich benutze"image.set_from_pixbuf", um das Bild anzuzeigen. Aber ich habe das folgende Ergebnis erhalten: