OPENCV学习笔记1_Mat 创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPENCV学习笔记1_Mat 创建相关的知识,希望对你有一定的参考价值。

    在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 创建的主要内容,如果未能解决你的问题,请参考以下文章

OPENCV学习笔记2_Mat 加载, 显示

OPENCV学习笔记3_Mat 保存

数字图像处理OpenCV3 学习笔记

OPENCV学习笔记1-8_选取图像局部区域

[OpenCV学习笔记2][Mat数据类型和操作]

OpenCV学习笔记:Mat矩阵的初始化