在做项目期间,遇到过程序计算耗时长,实时性满足不了需求的问题。通过这一段时间的接触,总结了一些OpenCV中Mat类型的用法。
目录
一、 Mat类型的创建
1.常用的有两种创建方式:
1. Mat img(2, 4, CV_8UC3, Scalar(0, 255, 255));
2. Mat img=cvCreatMat(2, 4, CV_8UC3); 需要注意的是这种创建方式在用完的时候需要释放。img.release();
其中:(2,4)表示创建的是2行4列的矩阵,CV_8UC3表示数据类型。
常用的数据类型:
CV_8UC1// 8位无符号单通道
CV_8UC3// 8位无符号3通道
CV_32FC1// 32位浮点型单通道
CV_32FC3// 32位浮点型3通道
2.多通道矩阵创建:
需要改变的是数据类型,例如我要创建一个100行200列300通道的矩阵,并且存储的内容是double类型的。
Mat img=cvCreatMat(100, 200, CV_8FC(300)); 其中300可以根据通道数而改变。
二、Mat类型赋值和访问
1.单通道矩阵访问:
例如对img矩阵中第一行第一列赋值(同样也适用于访问):
img.at<double>(0,0)=0.0;
2.多通道的矩阵访问:
对矩阵第一个通道第一行第一列赋值(同样也适用于访问):
img.at<vec<数据类型,总通道数>>(行,列)[通道]=0.0;
三、矩阵运算
1 基本概念
OpenCV的Mat类允许所有的矩阵运算。
2 矩阵加减法
我们可以使用"+"和"-"符号进行矩阵加减运算。
-
cv::Mat a= Mat::eye(Size(3,2), CV_32F);
-
cv::Mat b= Mat::ones(Size(3,2), CV_32F);
-
cv::Mat c= a+b;
-
cv::Mat d= a-b;