何がインターネットには想像もつかな描画像からの離散的なピクセル値はPython?

StackOverflow https://stackoverflow.com/questions/434583

質問

い描像に基づき計算したピクセル値、可視化する一部のデータです。基本的にいた2次元マトリクスの色励および描画します。

いことに注意してはいない画像処理、造形、野暮ったすぎやしませんか変既存の画像もそのような全体像の変換、またはベクトルグラフィックはありません定の構造をイメージによっレンダリング-いしょうモノを生産しているアモルファス用途にでも便色の一つのピクセルです。

が必要で描画する画像を約1kx1kピクセルのもので、何か拡張性が役立ちます。最終ターゲット形式は、PNGやその他のロスレスなどの形式です。

まとめに呼び出された瞬間によImageDrawしたことは大きな成果ですね。点かと思って、特異的ではなく、比較的基礎ほか必要はあるので早く図書館利用できますか?

役に立ちましたか?

解決

numpy および scipy を使用できる場合(およびPythonで大きな配列を操作する場合はお勧めします)、 scipy.misc.pilutil.toimage 関数とても便利です。 簡単な例:

import numpy as np
import scipy.misc as smp

# Create a 1024x1024x3 array of 8 bit unsigned integers
data = np.zeros( (1024,1024,3), dtype=np.uint8 )

data[512,512] = [254,0,0]       # Makes the middle pixel red
data[512,513] = [0,0,255]       # Makes the next pixel blue

img = smp.toimage( data )       # Create a PIL image
img.show()                      # View in default viewer

良い点は toimage がさまざまなデータ型に非常によく対応しているため、浮動小数点数の2D配列はグレースケールなどに適切に変換されます

numpy scipy こちら。または、pipを使用:

pip install numpy scipy

他のヒント

import Image
im= Image.new('RGB', (1024, 1024))
im.putdata([(255,0,0), (0,255,0), (0,0,255)])
im.save('test.png')

画像の左上に赤、緑、青のピクセルを配置します。

バイト値を処理する場合、

im.fromstring()はさらに高速です。

要件

この例では、 Numpy および

目標は、作成する画像を最初に3(RGB)の数字のセットの配列として表現することです-Numpyの array() 、パフォーマンスとシンプルさのために:

import numpy

data = numpy.zeros((1024, 1024, 3), dtype=numpy.uint8)

次に、中央の3ピクセルのRGB値を赤、緑、青に設定します。

data[512, 511] = [255, 0, 0]
data[512, 512] = [0, 255, 0]
data[512, 513] = [0, 0, 255]

次に、Pillowの を使用しますImage.fromarray() を使用して、配列からImageを生成します:

from PIL import Image

image = Image.fromarray(data)

今、" show"画像(OS Xでは、プレビューで一時ファイルとして開きます):

image.show()

この回答はBADCODEの回答に触発されたもので、使用するには古すぎ、完全に書き直さずに単純に更新するには多すぎます。

異なるアプローチを使用 Pyxel, オープンソースの実施 のTIC-80API にPython3(TIC-80は、オープンソースのPICO-8).

こちらは完全なアプリだけを描きつ黄色のピクセルの黒い背景:

import pyxel

def update():

    """This function just maps the Q key to `pyxel.quit`,
    which works just like `sys.exit`."""

    if pyxel.btnp(pyxel.KEY_Q): pyxel.quit()

def draw():

    """This function clears the screen and draws a single
    pixel, whenever the buffer needs updating. Note that
    colors are specified as palette indexes (0-15)."""

    pyxel.cls(0)            # clear screen (color)
    pyxel.pix(10, 10, 10)   # blit a pixel (x, y, color)

pyxel.init(160, 120)        # initilize gui (width, height)
pyxel.run(update, draw)     # run the game  (*callbacks)

注意:図書館だけでプロの色が変更できる色として始めたから新築したものです。があります。

PILを使用してディスク上にイメージファイルを生成し、後でイメージリーダーソフトウェアでロードすると思います。

メモリ内の画像を直接レンダリングすることにより、速度が少し向上します(ディスクに画像を書き込んでから再ロードするコストを節約できます)。このスレッドをご覧ください https://stackoverflow.com/questions/326300/python-best-さまざまなpythonモジュールでその画像をレンダリングする方法については、描画用ライブラリ

個人的にwxpythonと dc.DrawBitmap 関数を試します。外部のイメージリーダーではなくそのようなモジュールを使用すると、多くの利点が得られます。

  • 速度
  • パラメータ用のボタンを備えたインタラクティブなユーザーインターフェイスを作成できます。
  • ズームインおよびズームアウト機能を簡単にプログラムできます
  • 画像を計算しながらプロットできます。これは、計算に時間がかかる場合に非常に役立ちます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top