有没有人知道一种方法,可以从PythonMagick.Image实例中获取像素数据,而不必先将其写入磁盘?
例如,我可以使用以下命令读入图像:
import PythonMagick
im = PythonMagick.Image('image.jp2')我现在希望能够获得未压缩的图像数据,这样我就可以在NumPy或matplotlib等其他东西中使用它,但我似乎找不到任何方法来做到这一点。我会直接使用matplotlib或PIL,但我读取的图像格式是JPEG2000,据我所知只有PythonMagick支持。
有什么建议吗?
发布于 2011-03-31 22:59:44
免责声明:我现在没有构建PythonMagick,而且我也不是专家,所以(1)以下任何或全部可能是错误的,(2)它肯定不会像你想的那样具体,(3)如果其他人知道得更好,我希望他们不会因为在这里看到答案而被打消主意。不管怎么说:
快速浏览一下代码,似乎可以使用Image类上的pixelColor方法逐个读取像素值。这将返回一个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或者其他任何东西来提取内容。
https://stackoverflow.com/questions/5501141
复制相似问题