« wxpythonとvtkでビデオプレーヤー作ってみる。その2。numpyアレイで用意した2Dテクスチャを四角ポリゴンに貼る。 | トップページ | wxpythonとvtkでビデオプレーヤー作ってみる。その4。vtkImageViewerでnumpyアレイ表示。 »

2013年6月19日 (水)

wxpythonとvtkでビデオプレーヤー作ってみる。その3。vtkImageViewerでjpeg表示。

目次

前置き

vtk使い始めなので、とりあえずなんか作ってみるという意味でビデオプレーヤーを作っていく企画の第3弾です。

vtkImageViewerを使ってみる

Vtkimageviewer

前回ちろっと触れましたが、vtkImageViewerというハイレベルなクラスが用意されているので、前回やったようにローレベルなポリゴンの設定とかはすっ飛ばすことが可能だった模様です。というわけで今回はvtkImageViewerをつかってやり直してみました。

画像サイズに合わせてウィンドウのサイズをリサイズしたかったのですが、vtkにはjpegReaderやtiffReadergが用意されています。

imageData = jpegReader.GetOutput()
w,h,z = imageData.GetDimensions()

としてからimageDataの下のメソッドでいろいろと画像の情報を取ってこれるようです。vtkは中身C++なので速いし、Pythonで実装されている部分が多いPILやpillowなんかの代わりとしても強力そうですね。

今回のコード

例によってメーリングリストにあった例を適当にいじってwxで使えるようにした程度です。

wx.Frame.__init__(self, None, title='TextureMapQuad', size=(w+40,h+100))

前回もそうしましたが、フレームを画像サイズより大きめにした上でpanelを置かないと、どうも後からリサイズしてもpanelが小さいままという問題があったためにハッキッシュなトリックをしています。すでに画像サイズにしたpanelをプロポーション1でEXPANDオプションつけてsizerに追加して、あとからFrameのFitを呼んでいるので、これでいいはずと思うんだけど。wxのsizerは時折わけわからない動作をするのであまり綺麗にデバックしないように心がけていたりする今日このごろ。追記)あほな単純ミスでした。panelをsizerに置いたつもりがvtkのrendererのrwiを置いてしまっているのでいけなかっただけでした。コードも修正。

import vtk
from vtk.wx.wxVTKRenderWindow import wxVTKRenderWindow
import wx


class Test(wx.Frame):

    def __init__ (self, fp):

        w,h,z,render = self.SetupRender(fp)

        wx.Frame.__init__(self, None, title='vtkImageViewer')
        canvas = wx.Panel(self, size=(w,h))
        rwi = wxVTKRenderWindow(canvas, -1)
        rwi.Enable(True)
        rwi.GetRenderWindow().AddRenderer(render)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(canvas, 1, wx.EXPAND)
        self.SetSizerAndFit(sizer)
        self.Layout()
        self.Show()

    @staticmethod
    def SetupRender(fp):

        jpegReader = vtk.vtkJPEGReader()
        jpegReader.SetFileName( fp )
        jpegReader.Update()
        imageData = jpegReader.GetOutput()
        w,h,z = imageData.GetDimensions()

        imageviewer = vtk.vtkImageViewer()
        imageviewer.SetInputConnection( jpegReader.GetOutputPort() )
        imageviewer.SetColorWindow( 255 );
        imageviewer.SetColorLevel ( 128 );

        renderer = vtk.vtkRenderer()
        renderer.AddActor(imageviewer.GetActor2D())

        return w,h,z,renderer


if __name__ == '__main__':
    app = wx.App(0)
    frame = Test( "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg" )
    app.MainLoop()

« wxpythonとvtkでビデオプレーヤー作ってみる。その2。numpyアレイで用意した2Dテクスチャを四角ポリゴンに貼る。 | トップページ | wxpythonとvtkでビデオプレーヤー作ってみる。その4。vtkImageViewerでnumpyアレイ表示。 »

Python」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/52102244

この記事へのトラックバック一覧です: wxpythonとvtkでビデオプレーヤー作ってみる。その3。vtkImageViewerでjpeg表示。:

« wxpythonとvtkでビデオプレーヤー作ってみる。その2。numpyアレイで用意した2Dテクスチャを四角ポリゴンに貼る。 | トップページ | wxpythonとvtkでビデオプレーヤー作ってみる。その4。vtkImageViewerでnumpyアレイ表示。 »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

IT技術注目記事

無料ブログはココログ