【问题标题】:opencv: is Mat(vector<Point2f>) yelding a wrong matrix header?opencv:是 Mat(vector<Point2f>) 输出错误的矩阵头吗?
【发布时间】:2014-09-12 12:53:14
【问题描述】:

我认为为 Mat(vector) 生成的标头是错误的, 它将矩阵打印为 Nx2 矩阵,但是 col 属性设置为 2。

我没有确认这是否是任何需要这个新矩阵的副本或只是一个子矩阵的操作都会失败的原因。

一个简单的例子是在这个新矩阵上获得一个选择: (Range(0,N), Range(0,1)) 将选择前两列,但是, 只选择第一个(范围运算符的第二个成员是排他的)

【问题讨论】:

    标签: c++ opencv matrix


    【解决方案1】:

    我没有看到你的问题,实际上Mat(vector&lt;Point2f&gt;) 是一个 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]
    

    【讨论】:

    • 非常感谢。我一个月没有使用 mat 容器,我只是查看深度标志而不是查看唯一定义的类型标志;
    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多