1. 程式人生 > >OPENCV學習筆記1_Mat 創建

OPENCV學習筆記1_Mat 創建

pre 銷毀 改變 int chan argv 一個 2個 zeros

2001年剛剛出現的時候,OpenCV基於 C 語言接口而建。為了在內存(memory)中存放圖像,當時采用名為 IplImageC語言結構體,但這種方法必須接受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 創建