2017-07-28 12 views
0

手書き数字認識システムを実証する目的で、私はPython 3アプリケーションでマウスで数字を描きたいと思っています。図面は、28×28のナンシー配列のグレースケールラスタ画像として終わらなければならない。Python:Numpy配列にマウスで "描画"

数字はMNIST datasetの桁に似ていてエイリアスにすることはできないため、大きなキャンバスに太い線を描き、画像をNumpy配列に読み込んでダウンサンプリングするといいでしょう。

どうすればこの問題を解決できますか?

編集:当初、私は描画を行うにはTkinterのキャンバスを使用したと考えられるが、Tkinterのキャンバスの描画のラスタライズ版を得るためにno wayがあるように思われます。

+0

あなたは描画ツールを作るためにpygameを見ることができます。と[画像に保存する](https://stackoverflow.com/questions/19193187/how-to-save-pygame-surface-as-an-image-to-memory-and-not-to-disk)ですそれを扱うことができます。 –

+0

@GustavoMagalhãesあなたのコメントは自分の質問に私の答えの秒前に来たように見えます! :P私はpygameが私の解決策より簡単だったかもしれませんが、今はPySideを使った解決策があります。とにかくありがとう。 – HelloGoodbye

答えて

0

私は明らかにこれをTkinterで解決できませんでした。

しかし、私はthis questionを見つけました。これは、PySideで提供されているPythonバインディングを使用してQtで可能であることが判明しました(おそらくPyQtもうまくいきました)。クラスQImageには、ピクセルデータのメモリビューを返すconstBitsというメソッドが含まれています。これをnumpy.asarrayを使ってNumpy配列にすることができます。

QImageインスタンスはウィジェットオブジェクトではないため、Qtによってレンダリングされることは決してありませんが、通常のQWidgetオブジェクトに対してはdrawnとなります。 QWidgetがサブクラス化されている場合、メソッドmousePressEvent,mouseMoveEventおよびmouseReleaseEventは、サブクラスでオーバーライドされ、QPainterPathオブジェクトをオブジェクトに描画するように、hereとすることができます。

関連する問題