2

EDIT: Actually, I need a way I can read the lines and extract the pixel info into some structure so I can use the putpixel function to create an image based on the ppm p3 file.

I've been trying this for so long and I can't just get it right.

I'm working with Python Imaging Library (PIL) and I want to open a PPM image and display it as an image on the screen.

How can I do that using only PIL?

this is my ppm image. it's just a 7x1 image that i created.

P3
# size 7x1
7 1
255
0
0
0
201
24
24
24
201
45
24
54
201
201
24
182
24
201
178
104
59
14
4

6 に答える 6

6

np.arrayまた、オブジェクトを操作するのが好きな場合は、次のようにしてください。

>>> from scipy.misc import imread
>>> img = imread(path_to_ppm_file)
>>> img.shape
>>> (234, 555, 3)
于 2012-06-22T19:50:43.997 に答える
3

チュートリアルを読む:http://effbot.org/imagingbook/introduction.htm

最初の例

>>> import Image
>>> im = Image.open("lena.ppm")
>>> im.show()
于 2010-11-04T21:40:35.267 に答える
2

編集:もう少し情報が大いに役立ちます。開こうとしている画像と正確なエラーメッセージが表示されたので、PILとPPMについて少し文書化された事実を覚えています-PILはP1 / P2 / P3で始まるASCIIバージョンをサポートしておらず、バイナリのみをサポートしていますバージョンP4/P5/P6。PSファイルにフィールドがありません255。幅と高さの後に、最大ピクセル値のが必要です。


PPMはサポートされている形式としてリストされており、でファイルを開くことができるはずですImage.open('myfile.ppm')

画像を表示するには、もう少し情報が必要です。どのOSを使用していますか。また、使用したいウィンドウ関数を好みますか?

于 2010-11-04T21:39:40.077 に答える
2

編集:質問を変更し、行を読むことだけを許可した後、以下のリンクを確認してください。ファイルをロードするラッパーの書き方を説明しています。私はこれを自分でテストしようとしています、そしてそれはうまくいくはずです...


現在(2010年11月)、PILでプレーンPPMイメージを開くことはできません。ここでのプレーンはASCIIを意味します。ただし、バイナリバージョンは機能します。この主な理由は、ASCIIファイルのピクセルあたりのビット数が一定ではないためです。そして、これはPILのイメージローダーが想定していることです。関連する質問があります:

プレーンpgm形式のPIL画像フィルターを作成するにはどうすればよいですか?

プレーンPPM用のPILフィルターを作成する予定ですが、時間が足りません。あなたが助けに興味があるなら、私に知らせてください。

br、
ジュハ

于 2010-11-28T21:22:13.610 に答える
2

正確な例を使用したいくつかの背景概念‍:

  • .ppmは、人間が読めるように画像データが保存されるファイル形式の1つです。

  • PortablePixMap形式の略です

  • これらのファイルは通常、次の形式です。

# Optional Comments likes this one
# The first line is the image header which contains the format followed by width and height
P3 7 1
# Second line contains the maximum value possible for each color point
255
# Third line onwards, it contains the pixels represented in rows(7) and columns(1)
0 0 0
201 24 24 
24 201 45 
24 54 201
201 24 182 
24 201 178 
104 59 14

参照

これで、PPMファイルを適切に書き換えたことがわかります(カラー画像の各ピクセルに対してRGBトリプレットが考慮されているため)

ファイルを開いて視覚化する

OpenCV(素晴らしい仕事をします)

import cv2
import matplotlib.pyplot as plt
img = cv2.imread("\path to the image")
# Remember, opencv by default reads images in BGR rather than RGB
# So we fix that by the following
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# Now, for small images like yours or any similar ones we use for example purpose to understand image processing operations or computer graphics
# Using opencv's cv2.imshow()
# Or google.colab.patches.cv2_imshow() [in case we are on Google Colab]
# Would not be of much use as the output would be very small to visualize
# Instead using matplotlib.pyplot.imshow() would give a decent visualization
plt.imshow(img)

枕(またはPILと呼びます)

.ppmドキュメントには、次を使用してファイルを直接開くことができると記載されていますが、

from PIL import Image
img = Image.open("path_to_file")

参照

ただし、さらに詳しく調べると、バイナリバージョン(PPMの場合はP6と呼ばれる)のみがサポートされ、ASCIIバージョン(PPMの場合はP3と呼ばれる)はサポートされていないことがわかります。

参照

したがって、PILを使用するユースケースでは、理想的なオプションではありません❌。

を使用した視覚化の利点はmatplotlib.pyplot.imshow()、上記のように当てはまります。

于 2021-02-03T23:51:16.963 に答える
1

im = Image.open("lena.ppm")

これは、P3 * .PPMでは機能しないようです。P6を試してみると、機能します。

于 2010-11-07T13:17:29.560 に答える