【发布时间】:2014-09-12 12:53:14
【问题描述】:
我认为为 Mat(vector) 生成的标头是错误的, 它将矩阵打印为 Nx2 矩阵,但是 col 属性设置为 2。
我没有确认这是否是任何需要这个新矩阵的副本或只是一个子矩阵的操作都会失败的原因。
一个简单的例子是在这个新矩阵上获得一个选择: (Range(0,N), Range(0,1)) 将选择前两列,但是, 只选择第一个(范围运算符的第二个成员是排他的)
【问题讨论】:
我认为为 Mat(vector) 生成的标头是错误的, 它将矩阵打印为 Nx2 矩阵,但是 col 属性设置为 2。
我没有确认这是否是任何需要这个新矩阵的副本或只是一个子矩阵的操作都会失败的原因。
一个简单的例子是在这个新矩阵上获得一个选择: (Range(0,N), Range(0,1)) 将选择前两列,但是, 只选择第一个(范围运算符的第二个成员是排他的)
【问题讨论】:
我没有看到你的问题,实际上Mat(vector<Point2f>) 是一个 N 行、1 列、2 通道矩阵,并且范围内的选择返回前 N 个 行:
vector<Point2f> cp;
cp.push_back(Point2f(1,1));
cp.push_back(Point2f(2,2));
cp.push_back(Point2f(3,3));
Mat m(cp);
cerr << m.rows << " " << m.cols << " "<< m.channels() << endl;
cerr << m << endl;
int N=2;
Mat m2 = m(Range(0,N), Range(0,1));
cerr << m2.rows << " " << m2.cols << " "<< m2.channels() << endl;
cerr << m2 << endl;
3 1 2
[1, 1; 2, 2; 3, 3]
2 1 2
[1, 1; 2, 2]
【讨论】: