はじめに:
を使用する場合OpenCV では、Point(x,y) 座標を使用して画像行列 (cv::Mat) 内のピクセルにアクセスすると、次のように見えることに気づいたかもしれません。 (x,y) は期待どおりに行と列を参照しない可能性があるため、直感に反します。この記事は、この明らかな矛盾を明確にすることを目的としています。
座標系について:
数学では、行列は通常、行優先の順序を使用してアクセスされます。ここで、最初のインデックスは、行、2 番目のインデックスは列を表します。一方、点はデカルト座標系に従います。通常、(x,y) はそれぞれ水平 (横座標) 軸と垂直 (縦座標) 軸を示します。
OpenCV の行列と座標系:
cv::Mat は、OpenCV で画像と行列の両方に使用され、本質的にはマトリックス。ただし、その要素にアクセスするときは、行優先の順序に従います。したがって、mat.at
ただし、OpenCV の Point クラスはイメージ表記に基づいており、(x,y) はそれぞれ列と行。これは、画像コンテキストの Point(i,j) が行 j と列 i のピクセルを参照することを意味します。
なぜ違いますか?
理由この矛盾は、行列と点に使用される座標系が異なることにあります。行列は数学的理由から行優先の順序付けを優先しますが、ポイントは画像の視覚化と理解を容易にするために画像表記を優先します。
結論:
一方、OpenCV では座標系が異なります。最初は混乱するかもしれませんが、その基礎となるロジックを理解することで、ピクセル データに正しくアクセスして操作できるようになります。 mat.at
以上がOpenCVのPoint(x,y): 列-行または行-列?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。