opencv24.9学习_创建矩阵并给矩阵幅值的几种方法

该部分主要讲解Mat类矩阵的创建并通过不同的方式来初始化。

#include
#include

using namespace std;
using namespace cv;

int main()
{
    Mat image=imread("D:\1.jpg",1);

    /*
    M(2,2,CV_8SC3,Scalar(0,0,255));前面两个2表示矩阵的行和列,
    第三个参数:CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]
    如CV_8SC3:8表示八位,s表示signed,c表示char,3表示3个通道。
    Scalar:一个含有四个元素的向量,在这里用于给M赋值。   Scalar中的元素个数应该与通道数保持一致,若不止一致,将会根据通道数选取scalar的前几个,如果通道数大于scalar中的元素,空的通道将为0;
    */
    Mat M(2,2,CV_8SC(3),Scalar(0,0,255));
    cout<<"M="<""</*
    下面两行程序是讲解怎么定义超过2维的矩阵。
    L(3,sz, CV_8UC(1), Scalar::all(0));中的3指定了维度,
    sz数组指定了每个维度的尺寸(the size for each dimension),其他的参数意思不变。
    */
    int sz[3] = {2,2,2};
    Mat L(3,sz, CV_8UC(1), Scalar::all(0)); 
    //cout<

    M.create(4,4,CV_8SC3);
    cout<<"M="<""<4,4,CV_64F);
    cout << "E = "<< endl << " " << E << endl << endl;
    Mat C=(Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
    cout << "C = " << endl << " " << C << endl ;
    Mat R = Mat(3, 2, CV_8UC3);
    randu(R,Scalar::all(0),Scalar::all(255));
    /*
    format函数用于控制矩阵在命令行的输出格式
    format(R,"python")按照变成原因Python的格式输出
    其他的表示按照相应的编程语言输出
    */

    cout<<"R="<cout<<"R(python=)"<"python")<cout<<"R(CSV)="<"csv")<cout << "R (numpy) = " << endl << format(R,"numpy" ) << endl ;
    Point2f P(5,6);
    cout << "Point (2D) = " << P.x << endl ;
    Point3f P3f(2,5,6);
    cout << "Point (3D) = " << P3f << endl ;
    /*
    1.vector中push_back函数的意思是在vector的末尾插入一个元素。
    2.vector简单理解为动态一维数组push_back作用是在这个一维数组尾部插入一个元素 vector v;
      v.push_back(1); //v里面是: 1
      v.push_back(2); //v里面是: 1 , 2
      v.push_back(3); //v里面是: 1 , 2 , 3。
    */
    vector<float> v;
    v.push_back((float)CV_PI);v.push_back(2);v.push_back(3.01f);
    cout << "Vector of floats via Mat = " << Mat(v) << endl << endl;

    /*
    1、
        size_t:它是一个与机器相关的unsigned int类型,其大小足以保证存储内存中对象的大小。
        它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。
        size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。
        size_t size=sizeof(i);//用sizeof操作得到变量i的类型的大小
        实验发现采用int代替size_t也可以取得同样的效果。
    2、
        vector是声明意思不是太懂,通过查论坛和看程序结果,应该是下面的意思:
        vector是可变数组,stl的一种,也就是大小可变的数组,vector是point数据类型的集合,
        简单讲就是很多point的集合。vector,就是存放int变量,类似于int a[10]或者int* a,
        但是vector里边存放变量的个数不限。
        比如程序中的vector vPoints(20); vPoints(20)中存放的其实是20个Point2f型的点,Point2f有两个值,
        所以 vPoints(20)总共有40个值,如果 vPoints(20)中存放的其实是20个Point3f型的点,Point3f有3个值,
        所以 vPoints(20)总共有60个值.
    */
    vector vPoints(20);
    for (size_t i = 0; i < vPoints.size(); ++i)
    {
        vPoints[i]=Point2f((float)(i*5),(float)(i%7));
    }
    cout << "A vector of 2D Points = " << vPoints << endl <

你可能感兴趣的:(opencv学习)