OpenCV 3.0.0 Mat.push_back 用于矢量线

OpenCV 3.0.0 Mat.push_back for vector line

我想使用 push_back 函数逐行程序构建 OpenCV Mat

#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

int main(){
    Mat matrix(1,3,CV_8UC1);
    vector<unsigned char> line(3,1);
    matrix.push_back(Mat(line,true).t());
    return 0;
}

这个returns下面的错误

OpenCV Error: Assertion failed (DataType<_Tp>::type == type() && cols == 1) in push_back, file /usr/local/include/opencv2/core/mat.inl.hpp, line 1071 terminate called after throwing an instance of 'cv::Exception'
what():  /usr/local/include/opencv2/core/mat.inl.hpp:1071: error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back

我已通过为每个矩阵调用 type() 来保证类型相等,并且我可以使用 push_back(Mat(line,true))(无矩阵转置),但结果是添加了列

[1;
1;
1;]

错误似乎暗示我只能逐列添加元素(cols == 1 位),但方法描述说它将元素添加到矩阵的底部(暗示它添加行)

对于这种情况是否有任何解决方法,或者必须这样做?

正如 berak 在错误报告 link(http://code.opencv.org/issues/4340) 中提到的那样,分两行执行即可根据需要解决问题。

#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

int main(){
    Mat matrix(1,3,CV_8UC1);
    vector<unsigned char> line(3,1);

    Mat line_m(line,true);
    line_m=line_m.t();

    matrix.push_back(line_m);
    return 0;
}

结果来自 cout<<matrix<<endl;

[0 0 0;
 1 1 1]