複数の画像ファイルから読み取った結果を配列に入れると全て同じ画像になる

更新しました Nov 21, 2022

使用製品

ソフトウェア

  • LabVIEW
  • Vision Development Module

問題

LabVIEWのプログラムで、Visionの関数を用いて画像を扱っています。
複数の画像ファイルから読み込んだデータを表示させるためにForループを使用しましたが、Forループから出力されたImage配列は全て同じ画像となります。
どのようにすれば読み込んだ画像をそれぞれ表示させることができますか?

解決策

LabVIEWでは画像データを扱うためにIMAQ Createで生成したImageリファレンスを使用します。このImageリファレンスは画像データ自身ではなく、画像データのメモリ領域のリファレンスを表します。そのため、もし複数の画像ファイルの読み取りの際に、IMAQ Createの関数で用意したImageリファレンス一つのみを繰り返し指定して使用した場合、画像データのメモリ領域は上書きされることになります。

これを回避するためには、画像ファイルごとにIMAQ Createで新しいImageリファレンスを作成する必要があります。
例えばForループを使用する場合には、Forループの反復端子の出力を使用して、毎ループで異なる名前のIMAQ CreateのImageリファレンスを作成することができます。
2022-11-21_21h46_53.png

追加情報

複数のIMAQリファレンスを作成した場合には、プログラム終了時あるいは必要なタイミングでこれらのリファレンスを閉じるために使用するIMAQ Disposeの関数にあるAll Images ?(No) の入力にTRUEを配線することで複数のリファレンスをまとめて閉じることができます。