OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
画像への境界の追加

前のチュートリアル: 独自の線形フィルタを作る!
次のチュートリアル: Sobel 微分

原著者Ana Huamán
互換性OpenCV >= 3.0

目標

このチュートリアルでは、以下の方法を学ぶ:

  • OpenCV の関数 copyMakeBorder() を使って境界(画像への追加のパディング)を設定する。

理論

覚え書き
以下の説明は、BradskiとKaehlerによる書籍 Learning OpenCV に基づくものである。
  1. 前のチュートリアルでは、画像に対して操作を行うために畳み込みを使う方法を学んだ。ここで自然に生じる問題のひとつが、境界の扱い方である。評価対象の点が画像の端にある場合、どのように畳み込みを行えばよいのか。
  2. ほとんどの OpenCV 関数が行うのは、与えられた画像を少し大きい別の画像にコピーし、その後境界を自動的にパディングすることである(パディングは下記サンプルコードで説明されるいずれかの方法による)。これにより、問題なく必要なピクセルに対して畳み込みを実行できる(追加のパディングは処理後に切り取られる)。
  3. このチュートリアルでは、画像に追加のパディング(境界)を定義する2つの方法を簡単に見ていく。

    1. BORDER_CONSTANT: 一定の値で画像をパディングする(例:黒、すなわち \(0\))
    2. BORDER_REPLICATE: 元画像の最も端にある行または列を追加の境界に複製する。

    これはコードのセクションでより明確に示される。

  • What does this program do?
    • 画像を読み込む
    • どの種類のパディングを入力画像に使うかをユーザーが選べるようにする。2つの選択肢がある。

      1. 一定値の境界: 境界全体に一定値のパディングを適用する。この値は0.5秒ごとにランダムに更新される。
      2. 複製された境界: 元画像の端のピクセル値から境界が複製される。

      ユーザーは 'c'(一定値)または 'r'(複製)を押すことでいずれかの選択肢を選ぶ

    • ユーザーが 'ESC' を押すとプログラムは終了する

コード

チュートリアルのコードを以下の行に示す。

解説

変数の宣言

まず、使用する変数を宣言する。

特に注意すべきは変数 rng で、これは乱数生成器である。後で見るように、ランダムな境界色を生成するために使用する。

画像の読み込み

いつものように元画像 src を読み込む。

ウィンドウの作成

プログラムの使い方を簡単に説明した後、ウィンドウを作成する。

引数の初期化

次に、境界のサイズを定義する引数(topbottomleftright)を初期化する。これらに src のサイズの5%の値を与える。

ループ

プログラムは ESC キーが押されない限り無限ループで実行される。ユーザーが 'c' または 'r' を押すと、borderType 変数はそれぞれ BORDER_CONSTANT または BORDER_REPLICATE の値をとる。

ランダムな色

各反復ごと(0.5秒後)に、ランダムな境界色(value)が更新される...

この値は \([0,255]\) の範囲でランダムに選ばれた3つの数値の組である。

画像の周囲に境界を作る

最後に、関数 copyMakeBorder() を呼び出してそれぞれのパディングを適用する。

  • The arguments are:
    1. src: 入力画像
    2. dst: 出力画像
    3. topbottomleftright: 画像の各辺の境界の長さ(ピクセル単位)。これらを元画像のサイズの5%として定義する。
    4. borderType: 適用する境界の種類を定義する。この例では一定値または複製にできる。
    5. value: borderTypeBORDER_CONSTANT の場合、これは境界ピクセルを埋めるために使われる値である。

結果の表示

先ほど作成したウィンドウに出力画像を表示する

結果

  1. 上記のコードをコンパイルした後、画像のパスを引数として与えて実行できる。結果は次のようになるはずである:

    • デフォルトでは、境界を BORDER_CONSTANT に設定した状態で始まる。したがって、ランダムな色の境界が次々と表示される。
    • 'r' を押すと、境界はエッジのピクセルの複製になる。
    • 'c' を押すと、ランダムな色の境界が再び表示される
    • 'ESC' を押すと、プログラムは終了する。

    以下に、境界の色がどのように変化するか、また BORDER_REPLICATE オプションがどのように見えるかを示すスクリーンショットを示す: