《OpenCV3程式設計入門》——4.1.4 顯示建立Mat物件的七種方法
阿新 • • 發佈:2018-11-28
目錄
Mat不但是一個非常有用的影象容器類,同時也是一個通用聚矩陣類。建立一個Mat物件有很多種方法,列舉如下:
1、使用Mat()建構函式
師範程式碼如下:
# include <opencv2/opencv.hpp> # include <iostream> using namespace cv; using namespace std; void main(){ Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255)); //Mat()建構函式建立mat類 cout << "M= " << " " << M << endl; }
上述程式碼執行結果為:
對於二維多通道影象,需要制定的引數:(1)尺寸,即行數和列數,上述程式碼是:(2,2);(2)儲存元素的資料型別以及每個矩陣點的通道數,上述程式碼是:CV_8UC3(表示使用8位的unsigned char型別,每個畫素由三個元素組成三通道);(3)Scalar是個short型向量,可以用來初始化矩陣來表示顏色。
2、C\C++中建構函式進行初始化
程式碼如下:
int sz[3] = { 2, 2, 2 };
Mat L(3, sz, CV_8UC, Scalar::all(0));
上述例子建立了一個超過兩維的矩陣,需要的引數:(1)指定維數
3、為已經存在的IplImage指標建立資訊頭
程式碼如下:
IplImage* img = cvLoadImage("1.jpg", 1);
Mat mtx(img); //轉換IplImage*->Mat
上述程式碼是將IplImage 轉換為Mat,在OpenCV3.0版本是不適用的,在3.0版本應該是:
IplImage* img = cvLoadImage("1.jpg", 1); Mat mat = cvarrToMat(img); //轉換IplImage*->Mat
4、利用Create()函式
利用Mat類中的Create()成員ha你數進行Mat類的初始化操作,此種方法不能為矩陣設定初始值,只是在改變尺寸時重新為矩陣資料開闢記憶體而已。
程式碼如下:
M.create(4, 4, CV_8UC(2));
cout << "M= " << " " << M << endl<<endl;
執行結果為:
5、Matlab方式的初始化
Matlab形式的初始化方式:zeros()、ones()、eyes()。
程式碼如下:
Mat E = Mat::eye(4, 4, CV_64F);
cout << "E= " << endl << " " << E << endl << endl;
Mat X = Mat::ones(2, 2, CV_32F);
cout << "X= " << endl << " " << X << endl << endl;
Mat Z = Mat::zeros(3, 3, CV_8UC1);
cout << "Z= " << endl << " " << Z << endl << endl;
執行結果為:
6、對小矩陣使用逗號分隔式初始化函式
程式碼如下:
Mat C = (Mat_<double>(3, 3)<<0,-1,0,-1,5,-1,0,-1,0);
cout << "C= " << endl << " " << C << endl << endl;
7、為已經存在的物件穿件新資訊頭
使用clone()或者copyTo()為一個已經存在的Mat物件建立一個新的資訊頭,程式碼如下:
Mat RowClone = C.row(1).clone();
cout << "RowClone= " << endl << " " << RowClone << endl << endl;
執行結果如下: