2

使用三通道 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;

但错误的结果。在上述情况下我错了吗?任何帮助将不胜感激.....

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

4

2 回答 2

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;
于 2013-06-12T12:29:47.140 回答
1

如果您想使用 CV_8UC1 则访问 Mat 中的元素将是这样的

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

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

于 2014-10-13T02:29:35.200 回答