46

みんな、私は少し助けを求めています。私は初心者のプログラマーであり、現在抱えている問題の 1 つは、白黒.jpg画像をオーディオ信号に変調できるリストに変換しようとすることです。これは、python SSTV プログラムを作成するためのより大きなプロジェクトの一部です。

PIL モジュールをインポートし、組み込み関数を呼び出そうとしています: list(im.getdata()). 呼び出すと、python がクラッシュします。計算を簡単にするために、画像 (常に 320x240) を 240 行に分割する方法はありますか? または、間違った関数を呼び出しているだけですか。

誰かが提案を持っている場合は、発射してください。Python を使用して変調されたオーディオ トーンを生成した経験がある場合は、喜んで提供する「知恵の真珠」を喜んで受け入れます。前もって感謝します

4

9 に答える 9

71

getdata() を呼び出したときに Python がクラッシュすることはありません。イメージが破損しているか、PIL のインストールに問題がある可能性があります。別の画像で試すか、使用している画像を投稿してください。

これにより、イメージが希望どおりに分割されます。

from PIL import Image
im = Image.open('um_000000.png')

pixels = list(im.getdata())
width, height = im.size
pixels = [pixels[i * width:(i + 1) * width] for i in xrange(height)]
于 2009-07-10T14:04:23.830 に答える
41

numpyがインストールされている場合は、次のことを試すことができます。

data = numpy.asarray(im)

(ここで「試してみる」と言うのは、なぜうまくいかないのgetdata()かわからないためですasarray。getdataを使用するかどうかはわかりませんが、テストする価値があります。)

于 2009-07-10T15:12:52.913 に答える
3

PIL ではありませんが、scipy.misc.imreadそれでも興味深いかもしれません。

import scipy.misc
im = scipy.misc.imread('um_000000.png', flatten=False, mode='RGB')
print(im.shape)

与える

(480, 640, 3)

そうです(高さ、幅、チャンネル)。だからあなたはそれを繰り返すことができます

for y in range(im.shape[0]):
    for x in range(im.shape[1]):
        color = tuple(im[y][x])
        r, g, b = color
于 2016-07-24T08:56:36.787 に答える
1

上でコメントしたように、問題は PIL 内部リスト形式から標準の python リスト型への変換にあるようです。Image.tostring() の方がはるかに高速であり、ニーズによってはそれで十分であることがわかりました。私の場合、画像データの CRC32 ダイジェストを計算する必要がありましたが、うまくいきました。

より複雑な計算を実行する必要がある場合は、numpy を含む tom10 応答が必要になる場合があります。

于 2014-03-19T10:49:16.677 に答える