【发布时间】:2011-09-17 06:35:06
【问题描述】:
我目前想将一些值读入一个 3 通道、480 行 x 640 列的 8 位无符号整数值矩阵。我正在像这样初始化矩阵:
声明:
rgbMatrix = Mat::zeros(480,640,CV_8UC3);
当我尝试遍历整个矩阵时,我无法使用以下方法分配/获取值。值保持为 0。我的代码如下所示:
for (int i = 0; i < rgbMatrix.rows; i++)
{
for (int j = 0; j < rgbMatrix.cols; j++)
{
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 0] = *value0*;
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 1] = *value1*;
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 2] = *value2*;
}
}
但是,当我声明三个单独的 1 通道矩阵(也是 480 行 x 640 列的 8 位无符号整数值)并尝试访问这些矩阵的元素时,以下代码有效:
声明:
rgbMatrix0 = Mat::zeros(480,640,CV_8UC1);
rgbMatrix1 = Mat::zeros(480,640,CV_8UC1);
rgbMatrix2 = Mat::zeros(480,640,CV_8UC1);
for (int i = 0; i < rgbMatrix0.rows; i++)
{
for (int j = 0; j < rgbMatrix0.cols; j++)
{
(rgbMatrix0.data + rgbMatrix0.step * i)[j] = *value0*;
(rgbMatrix1.data + rgbMatrix1.step * i)[j] = *value1*;
(rgbMatrix2.data + rgbMatrix2.step * i)[j] = *value2*;
}
}
现在,我只想对这些操作使用一个矩阵,因为一段时间后必须跟踪三个单独的变量会让人厌烦。我有一种感觉,我没有为三通道矩阵访问正确的内存点。有谁知道我如何完成我在第二部分代码中所做的,但使用一个三通道矩阵而不是三个单独的单通道矩阵?
谢谢。
【问题讨论】: