如何从 numpy 数组转换为文件字节对象?
How to convert from numpy array to file byte object?
我读取图像文件为
with open('abc.jpg', 'rb') as f:
a = f.read()
另一方面,我使用cv2
读取同一个文件
b = cv2.imread('abc.jpg', -1)
如何将b
直接转换成a
?
谢谢。
你问题的答案:
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
代表的是不同的东西。在字符串 a
中,您正在读取图像的 JPEG 编码版本,而在 b
中,您有解码后的图像。您可以检查 len(b.tostring())
是否 比 len(a)
大得多。您需要知道要使用哪一个。另外,请记住,每次对 JPEG 进行编码时,都会降低一些质量。
如何将图像保存到磁盘:
你的问题看起来像你想要一个编码的二进制字符串。我能想到的唯一用途是将其转储到磁盘(或通过 http 发送?)。
要将图像保存在磁盘上,您可以使用
cv2.imwrite('my_file.jpg', b)
我读取图像文件为
with open('abc.jpg', 'rb') as f:
a = f.read()
另一方面,我使用cv2
读取同一个文件
b = cv2.imread('abc.jpg', -1)
如何将b
直接转换成a
?
谢谢。
你问题的答案:
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
代表的是不同的东西。在字符串 a
中,您正在读取图像的 JPEG 编码版本,而在 b
中,您有解码后的图像。您可以检查 len(b.tostring())
是否 比 len(a)
大得多。您需要知道要使用哪一个。另外,请记住,每次对 JPEG 进行编码时,都会降低一些质量。
如何将图像保存到磁盘:
你的问题看起来像你想要一个编码的二进制字符串。我能想到的唯一用途是将其转储到磁盘(或通过 http 发送?)。
要将图像保存在磁盘上,您可以使用
cv2.imwrite('my_file.jpg', b)