opencvcv::Mat的用法

    xiaoxiao2021-03-25  120

    1、使用准备: using namespace cv; 2、Mat的声明 Mat m=Mat(rows, cols, type); Mat m=Mat(Size(width,height), type); Mat A=Mat(3,4,CV_32FC1); Mat B=Mat(4,3,CV_32FC1); 3、Mat赋值 vector<Point3f>v;//suppose it is already full Mat m1=Mat(v,true);//boolean value true is necessary in order to copy data from v to m1 CvMat *p1=====?? Mat m2=Mat(p1); 4、Mat之间运算 MatC=2*A*B; Mat C=C.inv();//Now C is its own inverse matrix Mat D=A.t();//D is the transposed matrix of A Mat a=Mat(4,1, CV_32FC3);//a is 4x1, 3 channels Mat b=a.reshape(1);//b is 4x3, 1 channel 5、单通道Mat元素读写 Mat a=Mat(4,3, CV_32FC1); floatelem_a=a.at<float>(i,j);//access element aij, with i from 0 to rows-1 and j from 0 to cols-1 Point p=Point(x,y); floatelem_a=a.at<float>(p);//Warning: y ranges from 0 to rows-1 and x from 0 to cols-1 6、多通道Mat元素读写 template<typename _Tp> _Tp& at(int y,int x); // cxcore.hpp (868) template<typename _Tp>const _Tp& at(int y,int x)const; // cxcore.hpp (870) template<typename _Tp> _Tp& at(Point pt); // cxcore.hpp (869) template<typename _Tp>const _Tp& at(Point pt)const; // cxcore.hpp (871) // defineded in cxmat.hpp (454-468) typedefVec<float,2>Vec2f;// cxcore.hpp (254) // we can access the element like this : Mat m(Size(3,3), CV_32FC2 ); Vec2f& elem = m.at<Vec2f>( row , col );// or m.at<Vec2f>( Point(col,row) ); elem[0]=1212.0f; elem[1]=326.0f; float c1 = m.at<Vec2f>( row , col )[0];// or m.at<Vec2f>( Point(col,row) ); float c2 = m.at<Vec2f>( row , col )[1]; m.at<Vec2f>( row, col )[0]=1986.0f; m.at<Vec2f>( row, col )[1]=326.0f; 7.选取Mat上指定区域方法 Mat src; Rect rect; Mat dst = src(rect); 或者Mat dst(src,rect); 注意:cv::Mat A; A.row(i) = A.row(j); // 错误 A.row(i) = A.row(j) + 0; // 正确
    转载请注明原文地址: https://ju.6miu.com/read-20369.html

    最新回复(0)