2016-08-31 1 views
3

J'ai deux programmes dans Ubuntu: un programme C++ (jeu TORCS) et un programme python. Le programme C++ génère toujours des images. Je veux transférer ces images en temps réel dans python (peut-être le format numpy.ndarray). Donc je pense que peut-être utiliser Google protobuf pour sérialiser l'image en chaîne et envoyer une chaîne au client python par ZMQ est une méthode réalisable.Sérialisation de flux d'images en utilisant protobuf

Question: quel type de valeur convient à l'image (un pointeur) dans le fichier .proto? En d'autres termes, quel type de valeur I devrait utiliser pour remplacer le type string dans l'exemple ci-dessous?

message my_image{ 
    repeated string image = 1 
    } 

C'est ma façon d'écrire l'image à la mémoire (uint8_t * image_data):

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

Enfin, peut-être il y a une meilleure façon de transférer l'image (dans la mémoire) à un client de python ?

Toutes les suggestions sont appréciées.

+1

Le meilleur type serait 'bytes' pas' string' –

+0

Merci, tapez 'bytes' fonctionne :) –

+0

@DongLi a-t-il fonctionné en utilisant protobuf avec le client TORCS C++ et Python? Cela fonctionne-t-il bien en temps réel? Pourriez-vous peut-être partager comment vous l'avez fait? – Xxx

Répondre

1

Si je devais le faire, je voudrais utiliser l'un des:

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; 
} 

Ou peut-être utiliser un intermédiaire ScanRow message, composé soit de intercalées R, G, B octets ou séparés R, G, B octets . La première version sera probablement la plus rapide à générer et à afficher.

+0

Merci. J'utilise la première version et ça marche. –