代码之家  ›  专栏  ›  技术社区  ›  Chan

如何将numpy数组转换为file byte对象?

  •  1
  • Chan  · 技术社区  · 8 年前

    我将图像文件读取为

    with open('abc.jpg', 'rb') as f:
        a = f.read()
    

    另一方面,我使用 cv2 读取同一文件

    b = cv2.imread('abc.jpg', -1)
    

    如何转换 b a 直接地

    谢谢

    1 回复  |  直到 8 年前
        1
  •  4
  •   Marco Lavagnino    8 年前

    回答您的问题:

    success, a_numpy = cv2.imencode('.jpg', b)
    a = a_numpy.tostring()
    

    您应该知道的事情:

    第一 type(a) 是二进制字符串,并且 type(b) 是一个numpy数组。很容易在这些类型之间进行转换,因为您可以 np.array(binary_string) 从字符串到numpy,以及 np_array.tostring() 从numpy转换为二进制字符串。

    然而 a b 代表不同的事物。在字符串中 ,您正在读取图像的JPEG编码版本,并且在 b 你有解码后的图像。你可以检查一下 len(b.tostring()) 巨大的 len(a) 。你需要知道你想用哪一个。此外,请记住,每次对JPEG进行编码时,都会降低一些质量。

    如何将映像保存到磁盘:

    您的问题似乎需要一个编码的二进制字符串。我能想象的唯一用途是将其转储到磁盘(或通过http发送?)。

    要在磁盘上保存映像,可以使用

    cv2.imwrite('my_file.jpg', b)