В настоящее время я хочу прочитать некоторые значения в 3-канальную матрицу 480 на 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 на 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*;
}
}
Теперь я хочу использовать только одну матрицу для этих операций, так как необходимость отслеживания трех отдельных переменных приведет кутомительно через некоторое время.У меня такое ощущение, что у меня нет доступа к нужной точке памяти для трехканальной матрицы.Кто-нибудь знает, как я могу сделать то, что я сделал во второй части кода, но используя одну трехканальную матрицу вместо трех отдельных одноканальных матриц?
Спасибо.