![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
前のチュートリアル: 一般化BallardおよびGuilハフ変換による物体検出
次のチュートリアル: アフィン変換
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
a. OpenCVの関数 cv::remap を使い、単純なリマッピング処理を実装する。
すべてのピクセル位置 \((x,y)\) に対するリマッピングは、次のように表せる。
\[g(x,y) = f ( h(x,y) )\]
ここで \(g()\) はリマップ後の画像、\(f()\) はソース画像、\(h(x,y)\) は \((x,y)\) に作用するマッピング関数である。
簡単な例で考えてみよう。画像 \(I\) があり、次のようなリマッピングを行いたいとする。
\[h(x,y) = (I.cols - x, y )\]
何が起こるだろうか? 画像が \(x\) 方向に反転することが容易に分かる。例として、次の入力画像を考える。
赤い円が \(x\) に対してどのように位置を変えるかに注目してほしい(\(x\) を水平方向とする)。
画像を読み込む。
デスティネーション画像と2つのマッピング行列(x用とy用)を作成する
結果を表示するウィンドウを作成する
ループを設定する。1000msごとにマッピング行列(mat_x と mat_y)を更新し、それらをソース画像に適用する。
リマッピングを適用する関数は cv::remap である。次の引数を与える。
マッピング行列 mat_x と mat_y はどのように更新するのか? 読み進めてほしい。
\[h(i,j) = ( 2 \times i - src.cols/2 + 0.5, 2 \times j - src.rows/2 + 0.5)\]
for all pairs \((i,j)\) such that: \(\dfrac{src.cols}{4}<i<\dfrac{3 \cdot src.cols}{4}\) and \(\dfrac{src.rows}{4}<j<\dfrac{3 \cdot src.rows}{4}\)これは次のスニペットで表される。ここで map_x は h(i,j) の第1座標を、map_y は第2座標を表す。