【问题标题】:convert string image to a real image in python在python中将字符串图像转换为真实图像
【发布时间】:2020-08-11 21:29:09
【问题描述】:

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

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

这样的代码给了我一个图像,但与它应该的不同,我的意思是我得到一个只有水平边缘的灰色图像,没有别的。 如果我在 np.fromstring 和 cv2.imwrite 之间添加以下指令:

image = cv2.imdecode(image, cv2.IMREAD_COLOR)

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

【问题讨论】:

  • 看这里的最后 4 行...stackoverflow.com/a/59346488/2836621
  • 请分享string_image的前30-40个字符。
  • @MarkSetchell 总是同样的问题,使用该链接中的解决方案我得到了一个空图像
  • @MarkSetchell 这里是前 40 个字符:gZN+/4CSff9+jof/f4+I/4SWlP+Fl5X/gY+Y/3qI
  • 这看起来不像是 base64 编码的 PNG。它应该以iVBORw0KGgo= 开头请参阅stackoverflow.com/a/49690539/2836621 你实际发送了什么?

标签: python opencv base64


【解决方案1】:

这里有太多事情出错了。首先,您需要决定要发送的什么。然后你需要决定如何发送它。

关于您要发送的什么 - 您可以发送:

  • JPEG - 其优点是体积小且传输速度最快,同时占用的网络带宽最少。它也是独立的——接收者可以从 JPEG 标头中计算出宽度和高度。 缺点:可能质量较差。

  • PNG - 与 JPEG 大致相同,但更大且质量更好。

  • 原始像素 - 这似乎是您目前正在做的事情?这将占用最多的网络带宽并且是最慢的。此外,接收器不会知道宽度、高度、每个像素的位数或是否有任何子采样,因此您必须将其与像素一起传输。

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

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

然后是如何发送它的问题。您似乎是 base64 编码,但我想知道为什么这只会让图像无缘无故地增大 33%。

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 2019-02-12
    • 1970-01-01
    • 2012-12-24
    • 2013-07-31
    • 1970-01-01
    • 2011-08-03
    • 2018-09-07
    • 2013-07-23
    相关资源
    最近更新 更多