Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串转换回numpy数组_Python_Python 3.x_Numpy - Fatal编程技术网

Python 将字符串转换回numpy数组

Python 将字符串转换回numpy数组,python,python-3.x,numpy,Python,Python 3.x,Numpy,我正在用python进行视频聊天。我正在使用CV2捕获当前图像(这给了我一个numpy数组),然后我将numpy发送到我的服务器。现在我在服务器上有一个字符串,我需要将它解码回numpy数组 我正在使用Python3.7,但我还没有想出一些想法 #client #capture 500 frames while i < 500: i = i + 1 # Capture frame-by-frame ret, fram

我正在用python进行视频聊天。我正在使用CV2捕获当前图像(这给了我一个numpy数组),然后我将numpy发送到我的服务器。现在我在服务器上有一个字符串,我需要将它解码回numpy数组

我正在使用Python3.7,但我还没有想出一些想法

    #client 
    #capture 500 frames
    while i < 500:
        i = i + 1
        # Capture frame-by-frame
        ret, frame = cap.read()
        #send data                           
        client_socket.send(bytes(str(ret) + "###" + str(frame), "utf-8"))


    #server
    #split ret and frame
    ret, frame = str(conn.recv(16000)).split("###")
    gray = cv2.cvtColor(frame.toNumpyArray #PseudoMethod  <-- Here
    ,cv2.COLOR_BGR2GRAY)
#客户端
#捕获500帧
当我<500时:
i=i+1
#逐帧捕获
ret,frame=cap.read()
#发送数据
client_socket.send(字节(str(ret)+“###”+str(frame),“utf-8”))
#服务器
#分体式网架
ret,frame=str(conn.recv(16000)).split(“####”)

gray=cv2.cvtColor(frame.toNumpyArray#PseudoMethod我认为
numpy.fromstring
函数正是您想要的

例如,
np.fromstring('12',dtype=int,sep='')调用返回这个数组:
数组([1,2])


希望有帮助。

以下两个程序演示了通过网络套接字通信numpy
ndarray
对象的一种方法。客户端使用
save
方法将数组转换为字节流,将流写入BytesIO对象,然后通过套接字发送到服务器:

import numpy as np
import socket
from io import BytesIO

# Create an output socket connected to server
sout = socket.create_connection(('127.0.0.1', 6543))

# Create data and write binary stream out to socket

a = np.array([[1.1, 2.2, 3.3],
              [4.4, 5.5, 6.6],
              [7.7, 8.8, 9.9]])

b = BytesIO()
np.save(b, a)

sout.send(b.getvalue())
sout.close()
服务器侦听相应的网络地址,接收数据,直到结束套接字关闭。然后,它将接收到的数据转换为
字节IO
对象,numpy的
加载
函数从中恢复结构:

import numpy as np
import socket
from io import BytesIO

# Create socket listening on correct port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 6543))
s.listen()

# Accept a connection and receive data
sock, address = s.accept()
data = b''
while True:
    indt = sock.recv(1024)
    if not indt:
        break
    data += indt

# Take data and recast to np.ndarray
data = BytesIO(data)

b = np.load(data)
print(type(b), b, sep='\n')
运行服务器的输出如下所示:

<class 'numpy.ndarray'>
[[1.1 2.2 3.3]
 [4.4 5.5 6.6]
 [7.7 8.8 9.9]]

[[1.1 2.2 3.3]
[4.4 5.5 6.6]
[7.7 8.8 9.9]]

有多种方法可以优化此代码,但这应该足以让您继续使用。

您能提供一个您得到的字符串的示例吗?我已经发布了一个示例。您似乎正在寻找方法来查看丢失的数据“…”。您无法从中恢复原始数据。
str
是错误的方法序列化数组。这不是他的字符串的外观。