说我有一些想传递给我的算法的图片。我在Python中遇到了tobytes()函数,其描述很清楚。
然而,我不清楚如果我将图像作为原始数据而不是原始数组形式传递,会有什么不同。是否存在应用程序,例如某人可能只需要传递原始数据?感谢。
答案 0 :(得分:1)
tobytes()
适用于需要python bytes
对象的情况 - 也许您希望将原始数据写入文件,或通过TCP套接字发送。文件和套接字不了解除字节序列以外的任何内容。
或许您想要pickle
您的数据,但您阅读它的计算机并不是那么笨拙。
检查float
或int
对象的内存中表示也很方便:
>>> np.array(1.0).bytes()
b'\x00\x00\x00\x00\x00\x00\xf0?'
但可以说,做得更好:
>>> np.array(1.0).view((np.uint8, 8))
array([ 0, 0, 0, 0, 0, 0, 240, 63], dtype=uint8)
答案 1 :(得分:0)
传递原始数据意味着您不再知道图像大小,只知道其像素占用的字节数。它是1024x800图像还是1600x512图像?
您还会丢失类型信息:除非图像最初具有8位像素值,否则每个像素将被"拆分"跨越多个字节(例如,浮点值为4个字节)。
也就是说,将原始字节传递给函数是个坏主意。您必须定义函数以对数据进行假设(例如,8位方形图像),这是您无法测试的。优势是什么?
然而,原始数据可能是有趣的推进压缩算法(例如zip),以将图像数据保存到文件。您可以将图像信息写入文件(大小,数据类型),然后写入压缩的原始字节流。但是所有这一切都会发生在一个函数中,你不会将原始字节传递给函数。