通过Mat :: at获取一个像素

时间:2013-02-28 08:22:30

标签: c++ opencv

我正在尝试从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.
}

然而,结果并不像预期的那样。 这是在彩色图片上绘制的对角线。 enter image description here 这是灰度图片。 enter image description here 有人看到了这个问题吗?

2 个答案:

答案 0 :(得分:6)

问题是你试图以int(每像素32位图像)访问每个像素,而你的图像是3通道无符号字符(每像素24位图像)或1通道无符号字符(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;
}

答案 1 :(得分:3)

(image2.at<int>(i, i)) = 0xffffff;

看起来你的彩色图像是24位,但你的寻址像素就int而言似乎是32位。