从PythonMagick图像获取像素数据?
有没有人知道一种方式从PythonMagick.Image实例获取像素数据,而不必先写入磁盘?从PythonMagick图像获取像素数据?
举例来说,我可以使用图像中读出:
import PythonMagick
im = PythonMagick.Image('image.jp2')
我现在想能够得到的未压缩的图像数据,这样我可以在别的像NumPy这样或matplotlib使用它,但我似乎无法找到任何方法来做到这一点。我只是直接使用matplotlib或PIL,但我正在阅读的图像格式是JPEG 2000,据我所知,它只支持PythonMagick。
有什么建议吗?
免责声明:我没有PythonMagick建在哪里,我现在和不是专家,所以(1)任何或所有以下的可能是错误的,(2),它肯定会不到你具体(3)如果别人知道的更好,我希望他们不会因为在这里看到答案而被推迟。无论如何:
从快速查看代码看来,您可以使用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
或其他方法提取内容。
感谢您的建议,Gareth。你觉得哪个版本的PythonMagick具有get_blob_data方法?我现在从Ubuntu库中使用0.9.1版本,我似乎没有。我想最终我可能最终不得不使用像素迭代器,因为numpy希望它的输入已经以数组形式(http://dmr.ath.cx/gfx/python/)。 – 2011-04-03 11:47:50
我想我正在从ImageMagick网站的最新版本中查看源代码。我完全有可能以某种方式误解它 - 正如我所说的,我不是PythonMagick专家。 – 2011-04-03 16:38:43
This works:open(“foo.png”,“wb”)。write(blob.data) 不需要调用get_blob_data().... – 2014-12-16 16:46:11