有谁知道一种从PythonMagick.Image实例获取像素数据而不必先将其写入磁盘的方法吗?
例如,我可以使用以下方法读取图像:
import PythonMagick
im = PythonMagick.Image('image.jp2')
现在,我希望能够获取未压缩的图像数据,以便可以在NumPy或matplotlib之类的其他文件中使用它,但是我似乎找不到任何方法。我只会直接使用matplotlib或PIL,但据我所读,图像格式为JPEG 2000,据我所知仅PythonMagick支持。
有什么建议么?
最佳答案
免责声明:我目前没有在没有专家的地方构建PythonMagick,因此(1)以下任何一项或全部可能是错误的;(2)它肯定比您想要的不够具体,并且( 3)如果其他人知道的更好,我希望他们不会因为在这里已经看到答案而被推迟。无论如何:
快速浏览一下代码,似乎可以使用pixelColor
类上的Image
方法逐一读取像素值。这将返回一个PythonMagick.Color
值,您可以从中提取R,G,B分量。底层的C ++库支持使用Image::writePixels
一次读取很多像素,该像素也出现在PythonMagick.Image
中。但我认为该方法的正确使用取决于PythonMagick中未实现的其他事项。遗憾的是,因为我敢打赌,这比一次读取一个像素要有效得多。
另一种可能更好的方法是,看起来好像可以将图像的内容写入内存中的PythonMagick.Blob
对象,这基本上与仅写入文件而不写入文件:-)相同。您可以选择写入的格式,就像写入文件时一样。似乎有一个叫做get_blob_data
的东西可以提取Blob
的内容。像这样:
im = PythonMagick.Image('image.jp2')
blob = PythonMagick.Blob()
im.write(blob, "png")
data = PythonMagick.get_blob_data(blob)
我认为生成的
data
是一个Python字符串,其字节是图像的二进制表示形式。 (我假设您使用的是Python 2.x,字符串类型为8位。我不知道PythonMagick是否与3.x一起使用。)我认为有些格式基本上是原始像素数据。尝试“ RGB”。然后,您可以通过许多struct.unpack
或其他内容提取内容。关于python - 从PythonMagick图像获取像素数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5501141/