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:
 Es ist so, als gäbe es einen lauten Bereich. Bitte helfen Sie mir, mein Problem zu lösen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage