gpt4 book ai didi

python - 在 Python 中从 TCP 客户端获取字符串后加快从字节字符串到图像的转换

转载 作者:行者123 更新时间:2023-12-02 17:41:54 25 4
gpt4 key购买 nike

我有一个从 TCP 客户端中的 TCP 服务器接收图像的客户端。

在此之后,图像被序列化,当然也被序列化为字节。现在我想再次将其 reshape 为图像。

但是我的过程需要很长时间,所以我想知道是否可能有一种更pythonic、更快的方法?

每个步骤的代码都有注释,但在这里它们是:

1.将其从十六进制二进制表示转换为可读字符串(0.002 s)

2.在每个字节对后拆分字符串(0.08 s)

3.将列表的每个值转换为整数(0.17 s)

4.Reshape成矩阵表示红、绿、蓝(0.02)

5.Reshape矩阵一起形成图像

在查看时间后,我发现第 3 步花费的时间最多。

#....Some TCP stuff before, and this code is in a loop:
#Convert from hex binary to string
asstr = binascii.hexlify(data)
#Split up after each byte couple
n = 2
split = [asstr[i:i+n] for i in range(0, len(asstr), n)]
#Convert each byte couple to integer from its hex representation
asint = [];
for i in split:
asint.append(int(i,16))

#Reshape into red,green and blue
try:
red = np.asarray(asint[::3]).reshape(240,424);
green = np.asarray(asint[1::3]).reshape(240,424);
blue = np.asarray(asint[2::3]).reshape(240,424);
except ValueError:
continue;

#Reshape into an Image representation for opencv
img = np.transpose(np.asarray([red,green,blue],dtype=np.uint8),axes=(1, 2, 0))

#Show image
cv2.imshow('something',img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

如果我打印出数据,我会在命令行中得到一些“ascii-crap”,它们只是它们在 ascii 中的数字表示。
binascci.hexlify(data) 解码后并将其打印出来,我得到一个巨大的字符串,如“ 0112311a3b2b1c312...”(只是一个例子)

最佳答案

你确定你没有让事情变得比必要的复杂吗?也许我错过了一些东西,但有一个模拟 bytes正确长度的对象我在一行中得到与您的五步方法相同的输出:

import numpy as np
import binascii

def the_humourless_route(data):
return np.frombuffer(data, dtype=np.uint8).reshape(240, 424, 3)

def the_scenic_route(data):
#....Some TCP stuff before, and this code is in a loop:
#Convert from hex binary to string
asstr = binascii.hexlify(data)
#Split up after each byte couple
n = 2
split = [asstr[i:i+n] for i in range(0, len(asstr), n)]
#Convert each byte couple to integer from its hex representation
asint = [];
for i in split:
asint.append(int(i,16))

#Reshape into red,green and blue
try:
red = np.asarray(asint[::3]).reshape(240,424);
green = np.asarray(asint[1::3]).reshape(240,424);
blue = np.asarray(asint[2::3]).reshape(240,424);
except ValueError:
pass

#Reshape into an Image representation for opencv
img = np.transpose(np.asarray([red,green,blue],dtype=np.uint8),axes=(1, 2, 0))
return img

data = bytes(np.random.randint(0, 256, (240*424*3,)).tolist())
print(np.all(the_scenic_route(data) == the_humourless_route(data)))

输出:
True

关于python - 在 Python 中从 TCP 客户端获取字符串后加快从字节字符串到图像的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com