传递图像与原始数据之间是否存在差异

时间:2018-01-06 04:42:24

标签: python image numpy image-processing computer-vision

说我有一些想传递给我的算法的图片。我在Python中遇到了tobytes()函数,其描述很清楚。

然而,我不清楚如果我将图像作为原始数据而不是原始数组形式传递,会有什么不同。是否存在应用程序,例如某人可能只需要传递原始数据?

感谢。

2 个答案:

答案 0 :(得分:1)

tobytes()适用于需要python bytes对象的情况 - 也许您希望将原始数据写入文件,或通过TCP套接字发送。文件和套接字不了解除字节序列以外的任何内容。

或许您想要pickle您的数据,但您阅读它的计算机并不是那么笨拙。

检查floatint对象的内存中表示也很方便:

>>> 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),以将图像数据保存到文件。您可以将图像信息写入文件(大小,数据类型),然后写入压缩的原始字节流。但是所有这一切都会发生在一个函数中,你不会将原始字节传递给函数。