Мне кажется, что использование Матрицы с диапазонами как L-значение (цель назначения) должно работать или нет (и, если не ошибка компилятора, было бы неплохо), но не оба в зависимости от деталей законного значения r.Матрица Opencv Range L значение: Это ошибка?
cout << "hi mom" << endl;
Mat Img0=Mat::zeros(7,7,CV_8UC1);
Mat Img1=Mat::ones(7,7,CV_8UC1);
cout << Img0 << endl;
cout << Img1 << endl;
Img0(Range::all(), Range::all()) = Img1;
cout << Img0 << endl;
Img0(Range::all(), Range::all()) = 1;
cout << Img0 << endl;
Ниже приведено вышеизложенное. Первые два вывода матрицы имеют Img0
и Img1
, инициализированные соответственно Mat::zeros
и Mat::ones
соответственно.
Третья матрица распечатывают является Img0
еще раз, но после того, как
Img0(Range::all(), Range::all()) = Img1;
, который я ожидал бы установить Img0
в Img1
; т. е. все; , но это не так. Это все еще все нули.
Четвертый/последняя матрица распечатать результат
Img0(Range::all(), Range::all()) = 1;
Который имеет то же значение L в качестве третьего присваивания, но это работает, когда скаляр является Rvalue (в отличие от третьего который как матрица как RValue).
Есть ли смысл в этом, что мне не хватает? Должно ли допускаться такое поведение разности значений r? Мне кажется непоследовательным.
[0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1;
1, 1, 1, 1, 1, 1, 1]
1) Это все еще оказывает основное влияние на значение lvalue, полностью зависящее от r. 2) В чем смысл этого синтаксиса? Какая возможная польза для Img0 (Range :: all(), Range :: all()) = Img1; учитывая то, что он на самом деле делает? Как я понимаю, Img0 (Range :: all(), Range :: all()) = Img1 совпадает с img1 = Img0 (Range :: all(), Range :: all()). Img1 становится заголовком в Img0. – user3288226