在Python中将字符串图像转换为真实图像

问题描述

我正在尝试从套接字发送的字符串消息中获取图像,因此在发送消息之前,该消息已在base64中解码。现在在我的python服务器中,我正在使用此指令将字符串图像转换为真实图像,以便像cv2.imwrite()和cv2.imshow()中的参数一样给它

preview URL

像这样的代码给了我一个图像,但与给定的图像不一样,我的意思是那就像我得到了只具有水平边缘且没有其他东西的灰色图像。 并且如果我在np.fromstring和cv2.imwrite之间添加以下指令:

image = np.fromstring(string_image,np.uint8)
cv2.imwrite("image.png",image)
cv2.imshow("image",image)

我收到空图片错误。我应该在代码添加或更改什么才能获得真实图像?

解决方法

这里有太多出错了。首先,您需要确定要发送的什么。然后,您需要确定发送方式

关于要发送的内容-您可以发送:

  • JPEG-具有以下优点:体积小且传输速度最快,同时占用的网络带宽最少。它也是自包含的-收件人可以从JPEG标头计算出宽度和高度。 缺点:质量可能较低。

  • PNG-与JPEG几乎相同,但质量更大,更好。

  • 原始像素-也许这是您当前正在执行的操作?这将占用最大的网络带宽,而最慢。另外,接收器将不知道宽度,高度,每个像素的位数或是否存在任何子采样,因此您将不得不将其与像素一起发送。

如果以JPEG或PNG格式发送,则只能使用Python write()在接收端以JPEG或PNG格式将数据写入磁盘。如果要在接收端处理图像,则需要使用cv2.imdecode()将其转换为Numpy数组。

如果您以原始像素发送,则不会在接收端使用cv2.imdecode(),因为您将拥有原始像素,因此您需要将它们放入Numpy数组中,并根据其高度和宽度进行整形您记得像我上面所说的那样与像素一起传输。

然后是发送方式的问题。您似乎是对base64进行编码的,但我不知道为什么会这样,使图像无缘无故地增大了33%。