Как создать пустой мат в OpenCV?

Как создать пустой мат в OpenCV? После создания я хочу использовать метод push_back для вставки строк в Mat.

Что-то вроде:

Mat M(0,3,CV_32FC1);

или единственный вариант:

Mat M;
M.converTo(M,CV_32FC1);

?


person mrgloom    schedule 10.07.2015    source источник


Ответы (2)


Вы можете создать пустую матрицу, просто используя:

Mat m;

Если вы уже знаете его тип, вы можете:

Mat1f m; // Empty matrix of float

Если вы знаете его размер:

Mat1f m(rows, cols);  // rows, cols are int
or 
Mat1f m(size);  // size is cv::Size

И вы также можете добавить значение по умолчанию:

Mat1f m(2, 3, 4.1f);
//
// 4.1 4.1 4.1
// 4.1 4.1 4.1

Если вы хотите добавить значения в пустую матрицу с помощью push_back, вы можете сделать так, как уже было предложено @berak:

Mat1f m;
m.push_back(Mat1f(1, 3, 3.5f));   // The  first push back defines type and width of the matrix
m.push_back(Mat1f(1, 3, 9.1f));
m.push_back(Mat1f(1, 3, 2.7f));

// m
// 3.5 3.5 3.5
// 9.1 9.1 9.1
// 2.7 2.7 2.7 

Если вам нужно push_back данные, содержащиеся в vector<>, вы должны позаботиться о том, чтобы поместить значения в матрицу и транспонировать ее.

vector<float> v1 = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
vector<float> v2 = {1.2f, 2.3f, 3.4f, 4.5f, 5.6f};

Mat1f m1(Mat1f(v1).t());
Mat1f m2(Mat1f(v2).t());

Mat1f m;
m.push_back(m1);
m.push_back(m2);

// m
// 1.1 2.2 3.3 4.4 5.5
// 1.2 2.3 3.4 4.5 5.6
person Miki    schedule 10.07.2015

просто начни с пустого мата. 1-й push_back определит тип и размер.

Mat big;
big.push_back(Mat(1,5,CV_64F,3.5));
big.push_back(Mat(1,5,CV_64F,9.1));
big.push_back(Mat(1,5,CV_64F,2.7));

[3.5, 3.5, 3.5, 3.5, 3.5;
 9.1, 9.1, 9.1, 9.1, 9.1;
 2.7, 2.7, 2.7, 2.7, 2.7]
person berak    schedule 10.07.2015