You can get your mat object information (dimmension, rows, cols, size ....) and resize, reshape, copy Mat object by using Mat class method.
1. Get Information of Mat object
2. Resize Mat object
3. Reshape Mat object
Reshape method just change channels and rows without change number of total elements.
print_matInfo is method for check change
As result :
[mm1 Matrix]
channels = 1
rows X columns = 2 X 6
[mm1.reshape(2) Matrix]
channels = 2
rows X columns = 2 X 3
[mm1.reshape(3, 2) Matrix]
channels = 3
rows X columns = 2 X 2
4. Copy Mat object
It is safe to use "copyTo()", "clone()", "convertTo()" method for copy.
Warning : If you used '=' for copy, it is not copy to but refer to.
5. Mat Operation
1. Get Information of Mat object
cout << "dimmension : "<< mat7.dims << endl; cout << "rows : "<< mat7.rows << endl; cout << "columns : "<< mat7.cols << endl; cout << "size : "<< mat7.size() << endl << endl; cout << "number of total elements: " << mat7.total() << endl; cout << "type :" << mat7.type() << endl; cout << "depth :" << mat7.depth() << endl; cout << "channels :" << mat7.channels() << endl;
2. Resize Mat object
Mat_ <int> mat10(2, 4); mat10 << 1,2,3,4,5,6,7,8; mat10.resize(1); // resize to one rowmat10.resize(2); // resize to two rowsmat10.resize(3, Scalar(9)); // resize to three rows and fill blanks to 9
3. Reshape Mat object
Reshape method just change channels and rows without change number of total elements.
Mat mm1(2, 6, CV_8U); print_matInfo("mm1 ", mm1); Mat mm2 = mm1.reshape(2); // change to 2 channels
print_matInfo("mm1.reshape(2) ", mm2); Mat mm3 = mm1.reshape(3, 2); // change to 3 channels 2 rows
print_matInfo("mm1.reshape(3, 2) ", mm3);
print_matInfo is method for check change
void print_matInfo(String m_name, Mat mat){ cout << "[" << m_name << " Matrix]" << endl; cout << "channels = " << mat.channels() << endl; cout << "rows X columns = " << mat.rows << " X " << mat.cols << endl << endl; }
As result :
[mm1 Matrix]
channels = 1
rows X columns = 2 X 6
[mm1.reshape(2) Matrix]
channels = 2
rows X columns = 2 X 3
[mm1.reshape(3, 2) Matrix]
channels = 3
rows X columns = 2 X 2
4. Copy Mat object
It is safe to use "copyTo()", "clone()", "convertTo()" method for copy.
double mData2[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10, 11, 12}; Mat mmm4(3, 4, CV_64F, mData2); Mat mmm5 = mmm4.clone(); // clone to mmm5 from mmm4
Mat mmm6, mmm7; mmm4.copyTo(mmm6); // copy to mmm6 from mmm4
mmm4.convertTo(mmm6, CV_8U); // copy to mmm6 and convert data type double to unsign_int
Warning : If you used '=' for copy, it is not copy to but refer to.
Mat mmm3 = mmm4; mData2[0] = 3.2; // it change not only mmm4 but also mmm3.
cout << "mm3 = \n" << mmm3 << endl << endl;
5. Mat Operation
cout << oneMat + douMat << endl<< endl; // addition
cout << oneMat * douMat << endl<< endl; // matrix multiple
cout << oneMat / douMat << endl<< endl; // devide
cout << douMat - oneMat << endl<< endl; // subtraction
cout << oneMat.mul(2) << endl << endl; // multiple
cout << douMat.inv() << endl << endl; // Inverse matrix
cout << douMat.t() << endl << endl; // Replace rows and columns
Comments
Post a Comment