OPENCV學習筆記1_Mat 創建
阿新 • • 發佈:2017-09-18
pre 銷毀 改變 int chan argv 一個 2個 zeros
在2001年剛剛出現的時候,OpenCV基於 C 語言接口而建。為了在內存(memory)中存放圖像,當時采用名為 IplImage 的C語言結構體,但這種方法必須接受C語言所有的不足,這其中最大的不足要數手動內存管理,其依據是用戶要為開辟和銷毀內存負責。為此,OpenCV在2.0版本中引入了一個新的C++接口Mat(基於類的概念),利用自動內存管理給出了解決問題的新方法。但C++接口唯一的不足是當前許多嵌入式開發系統只支持C語言。
1.1 Mat 創建
方法一:構造函數
Mat img(2, 3, CV_8UC3, cv::Scalar(0, 0, 255));
// CV_8UC3,CV_[The number of bits per item][Signed or Unsigned][TypePrefix]C[The channel number]
//創建2行3列的矩陣,元素使用8位無符號char類型保存,具有3通道,每個像素的初始值是(0,0,255)
//每個像素點都是由1*3的小矩陣構成(行X3,列不變)。
方法二:create方法
//該方法不能為矩陣設置初始值,只是在改變尺寸時為矩陣數據重新分配內存。創建一個4行4列有2個通道的矩陣
img.create(4, 4, CV_8UC(2));
方法三:eye、ones、zeros方法
Mat::eye, 矩陣元素為對角矩陣
Mat::ones, 矩陣元素置1
Mat::zeros, 矩陣元素清零(單通道為灰度圖像;彩色圖像顯示為0即黑色)
其他:Mat復制等
1.2 示例
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; int main( int argc, char** argv ) { Mat img(3,2, CV_8UC3, Scalar(126,0,255)); cout << "yunfung_opencv_learn_test:" <<"\n\n"; cout << "img = \n " << img << "\n"; Mat eye = Mat::eye(4,3,CV_8U); Mat ones = Mat::ones(4,3,CV_8U); Mat zeros; zeros.create(4,3,CV_8U); //分配內存,不初始化元素 cout << "eye = \n " << eye << "\n"; cout << "ones = \n " << ones << "\n"; cout << "zeros = \n " << zeros << "\n"; return 0; }
OPENCV學習筆記1_Mat 創建