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

来源:互联网 发布:一建做题软件电脑版 编辑:程序博客网 时间:2024/06/08 04:51

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

#include<opencv2\opencv.hpp>#include<highgui\highgui.hpp>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="<<endl<<""<<M<<endl<<endl;    /*    下面两行程序是讲解怎么定义超过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<<L<<endl<<endl;    M.create(4,4,CV_8SC3);    cout<<"M="<<endl<<""<<M<<endl;    Mat E=Mat::eye(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="<<R<<endl;    cout<<"R(python=)"<<format(R,"python")<<endl;    cout<<"R(CSV)="<<format(R,"csv")<<endl;    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<int> 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<Point2f>是声明意思不是太懂,通过查论坛和看程序结果,应该是下面的意思:        vector是可变数组,stl的一种,也就是大小可变的数组,vector<Point>是point数据类型的集合,        简单讲就是很多point的集合。vector<int>,就是存放int变量,类似于int a[10]或者int* a,        但是vector里边存放变量的个数不限。        比如程序中的vector<Point2f> vPoints(20); vPoints(20)中存放的其实是20个Point2f型的点,Point2f有两个值,        所以 vPoints(20)总共有40个值,如果 vPoints(20)中存放的其实是20个Point3f型的点,Point3f有3个值,        所以 vPoints(20)总共有60个值.    */    vector<Point2f> 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 <<endl;}
0 0
原创粉丝点击