ホームページ > バックエンド開発 > C++ > OpenCVのPoint(x,y): 列-行または行-列?

OpenCVのPoint(x,y): 列-行または行-列?

DDD
リリース: 2024-12-08 14:19:09
オリジナル
615 人が閲覧しました

OpenCV's Point(x,y): Column-Row or Row-Column?

OpenCV: Point(x,y) は行と列ではなく列と行を表しますか?

はじめに:
を使用する場合OpenCV では、Point(x,y) 座標を使用して画像行列 (cv::Mat) 内のピクセルにアクセスすると、次のように見えることに気づいたかもしれません。 (x,y) は期待どおりに行と列を参照しない可能性があるため、直感に反します。この記事は、この明らかな矛盾を明確にすることを目的としています。

座標系について:

数学では、行列は通常、行優先の順序を使用してアクセスされます。ここで、最初のインデックスは、行、2 番目のインデックスは列を表します。一方、点はデカルト座標系に従います。通常、(x,y) はそれぞれ水平 (横座標) 軸と垂直 (縦座標) 軸を示します。

OpenCV の行列と座標系:

cv::Mat は、OpenCV で画像と行列の両方に使用され、本質的にはマトリックス。ただし、その要素にアクセスするときは、行優先の順序に従います。したがって、mat.at(i,j) は行 i と列 j のピクセルにアクセスします。

ただし、OpenCV の Point クラスはイメージ表記に基づいており、(x,y) はそれぞれ列と行。これは、画像コンテキストの Point(i,j) が行 j と列 i のピクセルを参照することを意味します。

なぜ違いますか?

理由この矛盾は、行列と点に使用される座標系が異なることにあります。行列は数学的理由から行優先の順序付けを優先しますが、ポイントは画像の視覚化と理解を容易にするために画像表記を優先します。

結論:

一方、OpenCV では座標系が異なります。最初は混乱するかもしれませんが、その基礎となるロジックを理解することで、ピクセル データに正しくアクセスして操作できるようになります。 mat.at(i,j) は行優先の順序付けを使用し、Point(x,y) はイメージ表記法を使用することに注意してください。

以上がOpenCVのPoint(x,y): 列-行または行-列?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート