Mat单通道元素访问

时间:2013-06-12 11:41:47

标签: opencv

使用三通道Mat,我们可以访问像

这样的元素
Mat draw(480, 480, CV_8UC3);
Vec3b pix(255,0,0);
draw.at<Vec3b>(i,j)=pix;

但在单通道Mat的情况下

 Mat draw(480, 480, CV_8UC1);

如何访问Mat元素。我已经尝试了一些像

这样的东西
 draw.at<float>(i,j)=255;

但错误的结果。在上述情况下我错了吗?,任何帮助都会赞赏.....

提前致谢.............

2 个答案:

答案 0 :(得分:3)

draw.at<float>(i,j)=255;应该是

draw.at<uchar>(i,j)=255;

您已将Mat声明为8位无符号字符,1个频道:

Mat draw(480, 480, CV_8UC1);

因此尝试将4字节数量写入单个字节容器不仅会导致错误的结果,而且可能会导致其他数据结构的错误。

以下是将(255.0)写入4个字节而不是1:

draw.at<float>(i,j)=255;

答案 1 :(得分:1)

如果你想使用CV_8UC1,那么访问Mat中的元素就像这样

(draw.at<Vec3b>(i,j)).val[k]=255;

其中K是通道号(0到3)