4

Mat オブジェクトからピクセルを取得しようとしています。テストするために、正方形に対角線を引いて、左上から右下の頂点まで完全な線が交差することを期待しています。

for (int i =0; i<500; i++){
     //I just hard-coded the width (or height) to make the problem more obvious

  (image2.at<int>(i, i)) = 0xffffff;
     //Draw a white dot at pixels that have equal x and y position.
}

ただし、結果は期待どおりではありません。これは、カラー画像に斜めの線を引いたものです。 ここに画像の説明を入力 これがグレースケールの写真です。 ここに画像の説明を入力 誰もが問題を見ますか?

4

2 に答える 2

6

問題は、各ピクセルに int (32 ビット/ピクセル イメージ) としてアクセスしようとしているのに、イメージが 3 チャネルの unsigned char (24 ビット/ピクセル イメージ) または 1 チャネルの unsigned char (8 ビット/ピクセル イメージ) であることです。画像) グレースケールの場合。グレースケールの場合、このように各ピクセルにアクセスすることができます

for (int i =0; i<image2.width; i++){
  image2.at<unsigned char>(i, i) = 255;
}

または、カラーの場合はこのように

for (int i =0; i<image2.width; i++){     
      image2.at<Vec3b>(i, i)[0] = 255;
      image2.at<Vec3b>(i, i)[1] = 255;
      image2.at<Vec3b>(i, i)[2] = 255;
}
于 2013-02-28T08:34:25.420 に答える
3
(image2.at<int>(i, i)) = 0xffffff;

カラー画像は24ビットのように見えますが、intで表したアドレス指定ピクセルは32ビットのようです。

于 2013-02-28T08:29:25.273 に答える