ホームページ > バックエンド開発 > C++ > OpenCV の `Point(x,y)` を `line()` と一緒に使用すると、`src.at(i,j)` と比較して予期しない結果が生じるのはなぜですか?

OpenCV の `Point(x,y)` を `line()` と一緒に使用すると、`src.at(i,j)` と比較して予期しない結果が生じるのはなぜですか?

Linda Hamilton
リリース: 2024-12-19 07:25:09
オリジナル
115 人が閲覧しました

Why does `Point(x,y)` in OpenCV produce unexpected results when used with `line()` compared to `src.at(i,j)`?

OpenCV: Point(x,y) 表現を理解する

画像処理では、点の順序を理解することが重要な場合があります。人気のあるコンピューター ビジョン ライブラリである OpenCV は、点の表現に関して混乱を招く可能性のある座標系を利用しています。

質問:

次元 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 );
  }
}
imshow("A",src);
waitKey(0);
ログイン後にコピー

期待される結果は、画像全体が白い線で塗りつぶされることです。ただし、白になるのは上部のみです。

この動作は、画像全体を白で塗りつぶす次の操作とは対照的です。

for(int i = 0; i < src.rows; i++){
  for(int j = 0; j < src.cols; j++){
    src.at<uchar>(i,j)=255;
  }
}
imshow("A",src);
waitKey(0);
ログイン後にコピー

答え:

説明は、以下に使用されるさまざまな表現にあります。ポイント:

  • src.at(i,j): (i,j) を (行,列) として使用します。
  • Point(x,y): (x,y) を次のように使用します。 (column,row).

この不一致は、イメージと行列の両方を表す OpenCV の Mat の二重の性質に起因します。行列表記では行優先の順序が使用され、最初のインデックスが行を表し、2 番目のインデックスが列を表します。この規則は src.at(i,j) と一致しています。

対照的に、点の座標系はイメージ表記に従い、最初の値は x 方向 (列) を指定し、2 番目の値は x 方向 (列) を指定します。値は y 方向 (行) を指定します。これは、Point(x,y) での (column,row) の順序付けの使用と、src.at(column,row) との位置合わせについて説明しています。

この区別を理解することは、効果的にアクセスして変更するために不可欠です。 OpenCV のポイント

以上がOpenCV の `Point(x,y)` を `line()` と一緒に使用すると、`src.at(i,j)` と比較して予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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