【发布时间】:2015-06-17 14:44:13
【问题描述】:
在我看来,使用带有 Ranges 的 Matrix 作为 L 值(赋值目标)应该可以工作(如果不是编译器错误会很好),但不能两者都取决于合法 r 值的细节。
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 值,但它在标量是右值时起作用(与第三个作为矩阵的右值不同)。
我想念这件事有什么意义吗?是否应该允许这种 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]
【问题讨论】:
标签: c++ opencv matrix range assignment-operator