2016-08-31 2 views
3

Ich habe zwei Programme in Ubuntu: ein C++ - Programm (TORCS-Spiel) und ein Python-Programm. Das C++ Programm erzeugt immer Bilder. Ich möchte diese Echtzeitbilder in Python (vielleicht das numpy.darray Format) übertragen. Ich denke also, dass es vielleicht eine praktikable Methode ist, Google-Protoobuf zu verwenden, um das Bild zu einem String zu serialisieren und eine Zeichenfolge an den Python-Client von ZMQ zu senden.Serialisierung Bildstrom mit Protobuf

Frage: Welcher Werttyp eignet sich für das Bild (ein Zeiger) in .proto Datei? Mit anderen Worten, welchen Werttyp sollte ich verwenden, um string Typ im folgenden Beispiel zu ersetzen?

message my_image{ 
    repeated string image = 1 
    } 

Dies ist die Art, wie ich Bild-Speicher (uint8_t * image_data) schreiben:

glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)image_data); 

Endlich, vielleicht gibt es eine bessere Art und Weise Bild zu übertragen (im Speicher) zu einem Python-Client ?

Alle Vorschläge sind willkommen.

+1

Der bessere Typ wäre 'Bytes' nicht' string' –

+0

Danke, Typ 'Bytes' funktioniert :) –

+0

@DongLi hat es funktioniert mit Protobuf mit TORCS C++ - Client und Python? Funktioniert es gut in Echtzeit? Könnten Sie vielleicht erzählen, wie Sie es gemacht haben? – Xxx

Antwort

1

Wenn ich dies zu tun hätte, würde ich eine verwenden:

message image { 
    int width = 1; 
    int height = 2; 
    bytes image_data = 3; 
} 

message image { 
    int width = 1; 
    int height = 2; 
    bytes red_data = 3; 
    bytes green_data = 4; 
    bytes blue_data = 5; 
} 

oder möglicherweise eine Zwischen ScanRow Nachricht verwenden, bestehend entweder verschachtelten R, G, B Bytes oder getrennt R, G, B-Bytes . Die erste Version wird wahrscheinlich am schnellsten generiert und angezeigt.

+0

Danke. Ich benutze die erste Version und es funktioniert. –

Verwandte Themen