画像および動画撮影をボタンで操作 | マーブルルール

画像および動画撮影をボタンで操作

Tips

スポンサーリンク

この記事で扱っていること

  • 画像撮影および動画撮影を一つのプログラムでボタン操作で切り替える方法

を紹介しています。

注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。

LabVIEWで画像を扱うためのアドオンソフトウェアであるVision Acquisition SoftwareとVision Development Moduleを使用して、画像の撮影や、それらを動画(AVIファイル)化することができます。

どちらの操作もサンプルファインダの中にサンプルはあるのですが、それぞれ独立したサンプルとなっており、この場面では動画にしたいけれどすぐにそのまま動画にもしたい、というときにはいちいちプログラムを切り替えるのが面倒でした。

これらの操作を同じVIで、実行中に切り替えることができるようにしてみました。やっていることはそれぞれの機能を列挙体で切り替えるだけの単純な操作です。

スポンサーリンク

どんな結果になるか

フロントパネルには画像表示器とカメラを選択する制御器、および画像や動画の撮影の切替とこれらに伴うファイルパスに指定などがあります。

プログラムを実行すると、画像を連続で映しつづけます。この時点では保存はされず、画像で残すか動画で残すかの選択を行い記録ボタンを押します。

なお、今回のプログラムで画像の保存を実行した場合には、次から次へと画像が得られるようにしています。

プログラムの構造

映像の撮影の妨げにならないように、撮影用のループ(下の図の上のWhileループ)と画像あるいは動画への保存ループ(下のWhileループ)はわけています。

これらのループの橋渡しにキュー関数を使用していますが、キューのデータタイプは画像リファレンス(IMAQ Createで作成したImage inやImage outの紫色のワイヤ)を指定するのではなく、あくまで画像そのもののデータを持った他のデータタイプ(今回のサンプルでは2次元の数値配列)にしないと意図したとおりにプログラムが動かなくなることに注意します。

そのため、IMAQ ColorImageToArray関数で画像データを2次元配列としています。

画像や動画に保存中は停止ボタンを押せるようになってほしくないので停止ボタンに対し無効プロパティを設定しています。

また、新規フラグとして数値を入れています。これは、動画撮影の際に使用するフラグで、0であれば新しい動画を撮影し始める状態だ、ということを動画保存の処理の中で認識させるようにしています(数値じゃなくてもブールでも行けると思います)。

保存のループでは基本的にまず画像撮影のループから受けとった2次元配列をIMAQ ArrayToColorImage関数で画像に戻し、後は画像か動画かどちらの方法で保存するかをケースストラクチャで判断しています。

画像としての保存は簡単で、IMAQ Write File2の関数に画像リファレンスおよびファイル名を入力するだけです。

動画としての保存も別に難しくはないのですが、一連の動画ファイルに保存する際にまずはIMAQ AVI2 Createの関数で動画ファイルを開く必要があります。開いた後はIMAQ AVI2 Write Frameの関数を繰り返すだけでいいのですが、その判断に、画像撮影のループから渡された新規フラグの値を使用しています。

画像の間引き

この記事で紹介した方法で画像を保存する場合、すぐに画像がたまってしまうことになりかねません。実際はこんなにも要らないよ、という場合には間引きさせます。

例えば以下のようなプログラムを用意してプログラム的に間引くことができます。この例では、上記のサンプルのように画像ファイル名がpict (数字).bmpであることを前提としています。

フォルダをリストの関数から得られるファイル名のリスト(配列)は少し厄介で、例えば画像を保存したフォルダにある画像ファイル名がpict (1).bmp、 pict (2).bmp、 pict (3).bmp、・・・ pict (30).bmpであるとき、ファイル名のリストである配列は、要素0から、 pict (1).bmp、 pict (10).bmp、 pict (11).bmp、・・・ pict (19).bmp、 pict (2).bmp、 pict (20).bmp、・・・、pict (29).bmp、pict (30).bmp、pict (3).bmp・・・などとなります。

そのため、撮影した順番通りとしたうえで間引くためには上記のようなひと手間を加えます。

カメラによる撮影自体はVision Acquisition Softwareのサンプルで一通りのことができると思いますが、画像撮影や動画撮影についてはそれぞれでサンプルがあるものの、一緒くたになったプログラムがなかったので紹介してみました。参考にして頂ければうれしいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました