OpenCV のような画像処理ライブラリでは、座標系と行列要素の順序がわかりにくい場合があります。この記事は、これらの概念、特に行列要素にアクセスするための at(i,j) と比較した OpenCV での Point(x,y) の使用法を明確にすることを目的としています。
OpenCV の cv: :Mat データ構造は画像と行列の両方に利用されます。数学的には、行列は行優先の順序で並べられます。つまり、最初のインデックスは行を指定し、2 番目のインデックスは列を指定します。
座標系内の点は、通常、x で順序付けされます。 - 軸が最初、y 軸が 2 番目です (デカルト座標系)。ただし、画像処理では、使用される軸の順序はイメージ表記法として知られており、最初の値は x 方向 (横座標) を表し、2 番目の値は y 方向 (縦座標) を表します。
OCV の at(i,j) メソッドでは、行列の左上隅が (行、列) インデックスを使用して要素にアクセスできます。 (0,0).
OpenCV の Point(x,y) コンストラクターを使用すると、イメージ表記を使用して cv::Mat の要素にアクセスできます。ここで、x は列を表し、y は列を表します行。
300x200 の行列を考えます。 (src):
for (int i = 0; i < src.rows; i++) { for (int j = 0; j < src.cols; j++) { line(src, Point(i, j), Point(i, j), Scalar(255, 0, 0), 1, 8); } }
このコードは画像全体に白い線を描くことを目的としています。ただし、画像の上部のみが塗りつぶされます。これは、line 関数が Point(i,j) コンストラクターを使用し、i を列として解釈し、j を行として解釈するためです。
Point(i,j) の代わりに at(i,j) を使用すると、 (行、列) の順序を使用しているため、画像全体を白で正しく塗りつぶします。
行/列の順序の違いを理解するOpenCV で点に使用される行列と画像表記は、OpenCV で画像と行列を効果的に操作するために重要です。 at(i,j) メソッドと Point(x,y) コンストラクターは、アプリケーションの特定のニーズに応えて、さまざまな座標系に基づいて要素にアクセスする便利な方法を提供します。
以上がOpenCV の `Point(x,y)` は Matrix Access の `at(i,j)` とどう違うのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。