BBでカメラを制御する
このチュートリアルでは、ビルディングブロック内でGainとExposureTimeを制御する方法について学びます。
BBなしでGainとExposureTimeを制御するには、デバイス情報へのアクセスと設定またはarv-tool-0.8を参照してください。
前提条件
- OpenCV(sensing-dev SDKと一緒に
-InstallOpenCV
オプションでインストール) - ion-kit(sensing-dev SDKと一緒にインストール)
チュートリアル
デバイス情報の取得
ionpyを使用して画像を表示するには、デバイスの次の情報を取得する必要があります。
- 幅
- 高さ
- PixelFormat
前のチュートリアルまたはarv-tool-0.8がこれらの値を取得するのに役立ちます。
パイプラインの構築
BBの構造は1台のカメラ画像を表示するチュートリアルと同じですが、Gain
およびExposureTime
の設定を有効にするためには、いくつか小さな変更が必要です。
このチュートリアルでは、enable_control
をtrue
に設定することで、Gain
とExposureTime
を手動で設定できます。
入力ポートは動的で、つまり、各実行で更新できますが、これらの値のキーは静的であるため、Paramを使用して静的な値を文字列で設定できます。たとえば、Gain
およびExposureTime
の値は、各実行で更新するためにポートによって設定され、これらの値のキーは静的であるため、次のようにParamで設定する必要があります。
// パラメータの設定
Param enable_control("enable_control", true),
Param gain_key("gain_key", "Gain"),
Param exposure_key("exposure_key", "ExposureTime")
// ポートの値の設定
double gain0 = 35.0;
double exposuretime0 = 50.0;
double gain1 = 47.0;
double exposuretime1 = 100.0;
gain_values = []
exposure_values = []
Node n = b.add(bb_name)(&gain0, &exposuretime0)
.set_param(
Param("num_devices", num_device),
Param("frame_sync", true),
Param("realtime_display_mode", true),
Param("enable_control", true),
Param("gain_key", "Gain"),
Param("exposure_key", "ExposureTime")
);
これで、Gain
とExposureTime
が正常に設定されました!
v23.11.01ではGainおよびExposureTimeのポートを取るためにBBが必要でしたが、このバージョンではGainおよびExposureTimeの値のアドレスを単に入力できます。
また、BBがこれらの値を入力として受け取るためには、BBのParam入力にenable_controlを追加する必要があります。
Gain
および ExposureTime
はデバイスのゲインと露光時間を制御するためのGenICamのフィーチャキーです。通常、これらはemvaによるSFNC(Standard Features Naming Convention)で設定されていますが、一部のデバイスには異なるキーがあるかもしれません。
その場合、パラメータのキーを変更する必要があります。このページを参照して、利用可能なフィーチャをリストアップする方法を確認してください。
Param("gain_key", <デバイスのゲインを制御するフィーチャの名前>)
Param("exposure_key", <露光時間を制御するフィーチャの名前>)
パイプラインの実行
パイプラインは実行する準備ができています。run()
を呼び出すたびに、ベクトル内のバッファまたはoutput
が出力画像を受け取ります。
b.run();
OpenCVで表示
前のチュートリアルでは、各実行で単に出力画像を表示していました。今回は、Gain
またはExposureTime
の値を更新します。次の例は、Gain
を毎回1.0
増やす方法を示しています。
while(user_input == -1)
{
// 動的にGainを更新
gain0 += 1.0;
// Builderを使用したパイプラインのJITコンパイルと実行
b.run();
}
完全なコード
このチュートリアルで使用される完全なコードはこちらです。
- もしお使いのOpenCVがSensing-Devインストール時に
-InstallOpenCV
オプションをつけてインストールしたものでない場合、プログラムに正しくリンクされているかを確認してください。