2017-09-20 2 views
0

I verwendet opencv ein Bild zu lesen und speichern, wie dies Redis:Wie analysiert man String-Repräsentation wieder in ein numpy Array?

frame=cv2.imread('/path/to/image.png') 
rd.set('frame', frame) 

dann lesen es eine String-Darstellung wie folgt zurück:

[[[ 38 45 51] 
    [ 38 45 51] 
    [ 38 45 51] 
    ..., 

    [235 217 222]]] 

dann, wie ich versuchte, ihn zurückzubekommen dies:

frameString=rd.get('frame') 
mat=np.array(frameString) 

aber

print mat.shape 

Ausgang

() 

dann habe ich versucht

mat=eval(frameString) 

das gibt mir eine Fehlermeldung:

exec exp in global_vars, local_vars 
    File "<console>", line 1, in <module> 
    File "<string>", line 1 
    [[[ 38 45 51] 
      ^
SyntaxError: invalid syntax 

Frage ist

how to convert this string representation back to numpy array correctly? 
+0

'pickle.dumps' ist eine bessere Möglichkeit, eine Zeichenfolgendarstellung eines numpy Arrays zu erzeugen. Es verwendet in der Tat "np.save", um das Array zu serialisieren. – hpaulj

Antwort

0

Die einfachste Sache woul zu tun d sei es als JSON zu kodieren und das zu redis zu speichern.

frame=cv2.imread('/path/to/image.png') 
rd.set('frame', json.dumps(frame. tolist())) 


frameString=json.loads(rd.get('frame')) 
mat=np.array(frameString) 

Sie können jedoch schnellere und kompaktere Serialisierungsformate finden.

+0

, rd.set ('frame', json.dumps (frame)) sagt '... ist nicht JSON serializable' –

+0

Sie sollten eine Möglichkeit zur Umwandlung in ein normales Array oder ähnliches –

+0

Ich denke nicht, numpy Arrays sind JSON serialisierbar entweder. Du musst es zuerst "tolist"(). https://Stackoverflow.com/q/26646362/ – hpaulj

Verwandte Themen