如何从numpy数组转换为文件字节对象?

时间:2018-03-12 12:46:27

标签: python numpy cv2

我将图像文件读为

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

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

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

如何直接将b转换为a

感谢。

1 个答案:

答案 0 :(得分:2)

回答你的问题:

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变为二进制字符串。

但是,ab代表不同的事物。在字符串a中,您正在读取图像的JPEG编码版本,而在b中您将获得已解码的图像。您可以检查len(b.tostring()) 大于是否大于len(a)。您需要知道要使用哪一个。另外,请记住,每次编码JPEG时,都会失去一些质量。

如何将图像保存到磁盘:

您的问题看起来像是想要编码的二进制字符串。我可以想象的唯一用途是将它转储到磁盘上(或通过http发送?)。

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

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