PIL 裁剪图像返回一个有趣的 PIL.Image._ImageCrop 数据类型
Posted
技术标签:
【中文标题】PIL 裁剪图像返回一个有趣的 PIL.Image._ImageCrop 数据类型【英文标题】:PIL cropped images return a funny PIL.Image._ImageCrop datatype 【发布时间】:2012-06-02 13:36:20 【问题描述】:当cropped_image = image.crop( cords )
正常工作时,它会返回一个与 Scipy 的assaray
一起工作的Image
对象:
bitmap <PIL.Image.Image image mode=RGBA size=1600x1200 at 0xAC9CFEC>
#SCIPY'S ASARRAY WORKS PROPERLY!
pic!! [[[ 16 18 31 255]
[ 16 18 31 255]
[ 16 18 31 255]
...,
但现在我得到了一个失败的 PIL.Image._ImageCrop
对象。
bitmap <PIL.Image._ImageCrop image mode=RGBA size=1600x80 at 0x99635AC>
#SCIPY'S ASARRAY FAILS WITHOUT WARNING
pic!! <PIL.Image._ImageCrop image mode=RGBA size=1600x80 at 0x99635AC>
Traceback (most recent call last):
File "/root/dev/spectrum/final/image_handler.py", line 216, in on_left_down
self._sample_callback()
File "/root/dev/spectrum/final/image_handler.py", line 237, in _sample_callback
self.__callback_function( sample )
File "/root/dev/spectrum/final/plot_handler.py", line 117, in __init__
self.InitUI()
File "/root/dev/spectrum/final/plot_handler.py", line 163, in InitUI
self.canvas_panel.draw(self.__crop_section)
File "/root/dev/spectrum/final/plot_handler.py", line 78, in draw
pic_avg = pic.mean(axis=2)
ValueError: axis(=2) out of bounds
为什么会出现这样的问题?
【问题讨论】:
尝试改用scipy.ndimage
。如果失败,请发布一些重现问题的代码。
【参考方案1】:
这是一种无声的失败,源于两种情况:
首先,crop 方法提供了非整数数字。
其次,the crop operation happens to be a lazy operation,只有在调用.load()
方法时才会进行裁剪(我对此不清楚,如果您了解更多请编辑此内容!)。
因此裁剪操作没有发生,也没有发出明显的信号。给它有效的坐标解决了这个问题。
【讨论】:
以上是关于PIL 裁剪图像返回一个有趣的 PIL.Image._ImageCrop 数据类型的主要内容,如果未能解决你的问题,请参考以下文章
Python 中的 PIL.Image.merge()用法示例 (还没弄懂)