2

基本的に均一に露光された画像の平均強度レベルを表示する強度計を開発する必要があります。カメラの焦点が変更されると、次の画面でポインタが正しい値に移動し始めます。

ここに画像の説明を入力してください

これに加えて、図に示すように、テキストフィールドに正確な強度値が数字で表示されます。

これまで、画像をキャプチャしてその強度値をテキストファイルに保存することができました。今、私はこのアニメーション画像を開発する必要があります。私はOpenCVを使用してアニメーションを作成したことがないので、OpenCVを使用してこの種のアニメーションを実行する方法を探しています。

ここにポインタはありますか?

私の完全なアプリケーションはWindowsフォーム(C ++)に基づいており、他の
画像処理タスク(ここには記載されていません)にOpenCVを使用しています。

注:メーターは基本的に、均一に露出された領域の平均強度レベルを表示します。

アップデート

私はここでいくつかの解決策を持っています。

それで、いくつかの研究で、私は今アルゴリズムを知っています:

シータ=A* I

どこ、

シータ=ポインタが回転する角度

A=比例係数

I=強度レベル

回転角は強度レベルに正比例します。

だから今ここに私が行く予定の方法があります:

1-cvNamedWindowを使用して新しいウィンドウを作成します

2-画像の静的な部分、つまり図のダイヤルを表示します。これは決して変化しません。

3-中央を指す垂直ポインタを表示します

4-強度レベルIの値を取得し、上記の式を適用してシータを計算します。

5-上記で計算した角度に基づいて、OpenCv関数を使用してポインターを回転させます。

私の理解を確認できる人はいますか?特に、ポインタを回転させるための最速の機能は何ですか?さらに改善できるかどうか教えてください。

4

1 に答える 1

0

2つのオプションを提案します。

  1. コメントでリンクしたWxIndustrialControlsのようなライブラリを使用します。
  2. 本当にopencvで描画したい場合は、これまでのコードを投稿して、行き詰まった部分に回答が集中できるようにしてください。

opencv での描画は行っていませんが、必要なパーツは見つかったと思います。

  • 単純な画像の読み込み (例: imread またはcvLoadImage )
  • 描画関数 (例:針を描画するためのfillPoly
  • この人がカメラフィードで行ったように、単純なcvShowImageを使用して画像をすばやく更新できるようです
  • 入力強度値を fillPoly のポイントのセットに変換する方程式

どの部分が詰まっているかについての詳細で質問を更新してください。複数のバージョンの opencv ドキュメントにリンクしていたら申し訳ありません。私が推測するこれらの基本的な機能には関係ありません。

式の更新:

私はこれをまったくテストしていませんが、思いつくのは楽しいもののように思えました:

仮定:

  • 中央の左 ==> 180 度
  • 中心の右 ==> 0 度
  • 画像の原点は左上
  • ピクセルの順序は [列、行] (つまり [x, y]) です。

構成変数:

  • min_v ==> ダイヤルの左端に表示される値
  • max_v ==> ダイヤルの右端に表示される値
  • arc_size ==> 強度範囲に使用する円の頂点の度数
  • 半径 ==> ダイヤルの上部から仮想円の中心までの距離 (半径が大きい ==> より平らなダイヤル)
  • top_padding ==> まっすぐ上を向いたときの静止画像の上部から針までの距離
  • needle_l ==> 描画したい針 / 多角形の長さ

入力変数:

  • needle_v ==> 針が表す値

出力変数:

  • needle_end ==> 画像座標に関する針の外側の点
  • needle_start ==> 画像座標に関する針の内側の点

計算:

読みやすさのために:

left_a =  90 + (arc_size / 2)             (angle for min_v)
right_a = 90 - (arc_size / 2)             (angle for max_v)
value_range = (max_v - min_v)

針の角度を取得します

value_proportion = (needle_v - min_v) / value_range
needle_a = left_a - (value_proportion * arc_size)

円の仮想中心を取得します(たとえば、サンプル画像の中心は画像の外側になります)

dial_origin = [int(image_width / 2) , top_padding + radius]

針の始点と終点を取得する

needle_end[x] = dial_origin[x] - radius * cos(needle_a)
needle_end[y] = dial_origin[y] - radius * sin(needle_a)
needle_start[x] = dial_origin[x] - (radius - needle_l) * cos(needle_a)
needle_start[y] = dial_origin[x] - (radius - needle_l) * sin(needle_a)
于 2012-06-14T13:51:08.167 に答える