OpenCV2:总结篇 cv::Mat 类
一.简介
在OpenCV中,可以用C++语法的Mat类来表示一张图像
也可以用C语法的lpllmage或CvMat结构体来表示一张图像
1.单通道像素值
2.多通道像素值
OpenCV默认颜色顺序为BGR
二.成员公有函数
cv::Mat类能够自动管理内存,由矩阵头和指向存储所有像素值的矩阵的指针构成
cv::Mat类表示一个n维的密集数值单通道或多通道数组,它可用于存储实数或复数值的向量和矩阵 灰度和彩色图像 体素 向量场 点云 张量 直方图等
1.常用的成员函数
Mat::Mat()
Mat::~Mat()
Mat::row // 创建一个具有指定了矩阵头中行数的参数的矩阵
Mat::col // 创建一个具有指定了矩阵头中列数的参数的矩阵
Mat::rowRange // 为指定的行span创建一个新的矩阵头,可取指定行区间元素
Mat::colRange // 为指定的列span创建一个心得矩阵头,可取指定列区间元素
Mat::clone // 创建一个数据及其基础数据的完整副本
Mat::copyTo //
Mat::convertTo
Mat::zeros
Mat::ones
Mat::channels
Mat::empty
Mat::atMat::isContinuous() //判断图像存储是否连续
2.不常用的成员函数
Mat::addref()
Mat::adjustROI()
Mat::assignTo()
Mat::at()
Mat::begin()
Mat::channels()
Mat::checkVertor()
Mat::clone()
Mat::col()
Mat::colRange()
Mat::convertTo()
Mat::copySize()
Mat::copyTo()
Mat::create()
Mat::cross()
Mat::deallocate()
Mat::depth()
Mat::diag()
Mat::dot()
Mat::elemSize()
Mat::elemSize1()
Mat::empty()
Mat::end()
Mat::eye()
Mat::inv()
Mat::isContinuous()
Mat::isSubmatrix()
Mat::locateROI()
Mat::mul()
Mat::ones()
Mat::pop_back()
Mat::ptr()
Mat::push_back()
Mat::push_back_()
Mat::release()
Mat::reserve()
Mat::reshape()
Mat::resize()
Mat::row()
Mat::rowRange()
Mat::setTo()
Mat::step1()
Mat::t()
Mat::total()
Mat::type()
Mat::zeros()
3.成员数据
class
CV_EXPORTS Mat
{
public
:
// 标志位
int
flags;
// 矩阵的维数,应该大于等于2
int
dims;
// 矩阵的行数和列数,如果维度大于2,则都为-1
int
rows,cols;
// 指向数据的指针
uchar* data;
// 指向引用计数的指针
int
* refcount;
uchar* datastart;
uchar* dataend;
uchar* datalimit;
MatAllocator* allocator;
MSize size;
MStep step;
};
4.构造函数
Mat() // 默认构造函数
Mat(int row,int cols,int type)
Mat(Size size,int type)
Mat(int rows,int cols,int type,const Scalar& s)
Mat(Size size,int type,const Scalar& s)
Mat(int ndims,const int* sizes,int type)
Mat(int ndims,const int* sizes,int type,const Scalar& s)
Mat(const Mat& m) // 拷贝构造函数
Mat(int rows,int cols,int type,void* data,size_t step=AUTO_STEP)
Mat(Size size,int type,void* data,size_t step=AUTO_SETP)
Mat(int ndims,const int* sizes,int type,void* data,const size_t* steps=0)
Mat(const Mat& m,const Range& rowRange,const Range& colRange=Range::all());
Mat(const Mat& m,const Rect& roi);
Mat(const Mat& m,const Range* ranges);
Mat(const CvMat* m,bool copyData=false);
Mat(const CvMatND* m,bool copyData=false);
Mat(const IplImage* img,bool copyData=false);
template<typename _Tp>explicit Mat(const vector<_Tp>& vec,bool copyData=false);
template<typename _Tp,int n>explicit Mat(const Vec<_Tp,n>& vec,bool copyData=true);
template<typename _tp,>
三.cv::Mat 类型转换
1.cv::Mat 类转换为 IplImage 类型和 CvMat 类型
cv::Mat img; CvMat cvMatImg = img; IplImage iplImage = img;
2.IpIImage 类型和 CvMat 类型转换为 cv::Mat 类型
IplImage* iplImg = cvLoadImage("a.jpg"); cv::Mat img(iplImg, true);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库