8

scipy 0.12 と PIL がインストールされた 2 つの異なるマシンがあります。あるマシンで .png ファイルを読み取ろうとすると、サイズ (wxhx 3) の整数の配列が返されます。

In[2]:  from scipy.ndimage.io import imread
In[3]:  out = imread(png_file)
In[4]:  out.shape
Out[4]: (750, 1000, 4)

他のマシンでは、同じ画像ファイルを使用してPIL.PngImagePlugin.PngImageFile、配列にラップされたオブジェクトを返します

In[2]: from scipy.ndimage.io import imread
In[3]: out = imread(png_file)
In[4]: out.shape
Out[4]: ()
In[5]:  out
Out[5]: array(<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1000x750 at 0x1D40050>, dtype=object)

後者のオブジェクトのデータにアクセスする方法がわかりません。

PILがPngライブラリを使用して画像を読み取る方法に何か問題があるという漠然とした感覚がありますが、間違ってこの動作を引き起こすより具体的なものはありますか?

4

6 に答える 6

5

このエラー (データ配列ではなくクラスをimread返す) は、古いバージョンの Python イメージング ライブラリを使用している場合や、さらに悪いことにまだインストールされている場合によく発生します。の更新された「フレンドリーな」フォークであり、間違いなくインストールする価値があります!PIL.PngImagePlugin.PngImageFilepillowPILpillowPIL

これらのパッケージを更新してみてください。(お使いの python ディストリビューションによって異なります)

# to uninstall PIL (if it's there, harmless if not)
$ pip uninstall PIL
# to install (or -U update) pillow
$ pip install -U pillow

次に、Python シェルを再起動して、コマンドを再度実行してみてください。

于 2014-09-24T10:52:34.773 に答える
1

libjpegKen Chatfieldの回答(受け入れられたもの)で述べられているように、ほとんどのユースケースでは、またはlibz依存関係が最も可能性の高い原因であると私は信じています。

また、誰かがtensorflow (特に 0.8.0) の下でこれを経験している場合 --- つまり、tensorflow がなくても PIL は機能しました --- tensorflow のバグが原因で同様の状況が発生する可能性があることにも言及したいと思います。

github で報告されたいくつかの関連する問題:

これに対する回避策は、またはをインポートした後に moveimport tensorflow as tfステートメントを実行することです。詳細な処方については、上記の問題を参照してください。numpyscipyPIL

于 2016-05-03T06:53:01.793 に答える
0

これを試して :

In[2]: from scipy.ndimage.io import imread
In[3]: imread("/hsgs/projects/awagner/test_image.png").shape

そして、何が出ているか教えてください。

于 2013-09-26T19:03:21.940 に答える