cv::Mat初始化、赋值初始化与访问方式

初始化

常量赋值初始化

cpp 复制代码
cv::Mat m = (cv::Mat_<float>(3,1) << 1, 2, 1.0);

指定类型和大小的二维数组

cpp 复制代码
cv::Mat m(int rows, int cols, int type);
cv::Mat m(cv::Size sz, int type);

初始化值均为0

cpp 复制代码
//二维数组,类型CV_8UC3, 初始化值cv::Scalar(100, 1, 1)
cv::Mat mat = cv::Mat::zeros(int rows, int cols, CV_8UC3, cv::Scalar(100, 1, 1)); 
cv::Mat mat = cv::Mat::ones(rows, cols, CV_32F); // 全1
cv::Mat mat = cv::Mat::eye(rows, cols, CV_64F); // 单位矩阵

数组赋值

cpp 复制代码
char* data = new char[15];
cv::Mat m3(3, 5, CV_8UC1, data);
//或者, 数据位数对齐
cv::Mat m4(1, 5, CV_8UC3, data);
cv::Mat m6(cv::Size(3, 5), CV_8UC1, data);

指定类型多维数组

cpp 复制代码
 7、指定类型的多维数组
    cv::Mat m(int ndims, const int* sizes, int type);
    int size[3] = { 3, 2, 2 };
    cv::Mat m7(3, size, CV_8UC1);
    //多维赋值
 		int matSize2[] = { 2,2,2 };//每一维元素的个数:8:行,10:列
    char* data2 = new char[8];
    cv::Mat m9(3, matSize2, CV_8UC1, data2);
cpp 复制代码
//使用cv::Vec定义相同类型、大小为n的一维数组初始化
cv::Vec<float, 10> data1{ 1,2,3,4,5, 6,7,8,9,10 };
cv::Mat m1(data1, true);
//使用cv::Matx定义相同类型、大小为mxn的二维数组
cv::Matx<float, 2, 4> data2{ 1,2,3,4,5,6,7,7 };
cv::Mat m2(data2, true);
//使用STL vector定义相同类型的一维数组
std::vector<float> vec{1, 2, 3, 4, 5, 6};
cv::Mat m3(vec, true);

访问:

1、 at 访问

If matrix is of type CV_8U then use Mat.at<uchar >(y,x).

If matrix is of type CV_8S then use Mat.at<schar >(y,x).

If matrix is of type CV_16U then use Mat.at<ushort >(y,x).

If matrix is of type CV_16S then use Mat.at<short >(y,x).

If matrix is of type CV_32S then use Mat.at<int >(y,x).

If matrix is of type CV_32F then use Mat.at<float >(y,x).

If matrix is of type CV_64F then use Mat.at<double >(y,x).

If matrix is of type CV_8UC3 then use Mat.at<Vec3b>(y,x)[0]

优点:直观好理解

缺点:访问速度相对慢

2、ptr指针进行访问

cpp 复制代码
cvInitMatHeader(&mat,3,2,CV_32FC3,data);//3通道
int nChannels = 3;
for(int x=0;x<mat.rows;++x){
	float *p = (float *)(mat.data.ptr + x*mat.step);//指向每一行的起始位置
for(int y=0;y<mat.cols;++y){
		float value[3];
	 value[0] = *(p+y*nChannels);
	 value[1] = *(p+y*nChannels+1);
	 value[2] = *(p+y*nChannels+2);
	 }
 }
相关推荐
2501_920953863 小时前
工业4.0时代,制造企业精益管理咨询的标准化实施步骤
大数据·人工智能·制造
~央千澈~3 小时前
《2026鸿蒙NEXT纯血开发与AI辅助》第四章 对鸿蒙next项目结构目录详解以及实战解决一个最初的依赖安装的报错·卓伊凡
人工智能
xinlianyq4 小时前
2026企业流量破局:四大主流短视频矩阵获客系统深度解析与选型指南
人工智能·矩阵
workflower5 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
AI人工智能+5 小时前
施工许可证识别技术:深度融合计算机视觉(CV)与自然语言处理(NLP)
深度学习·计算机视觉·ocr·施工许可证识别
Cx330❀6 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
OPHKVPS6 小时前
Anthropic 为 Claude Code 推出“自动模式”:AI 编码工具迈向更高自主性
网络·人工智能·安全·ai
Allen_LVyingbo6 小时前
斯坦福HAI官网完整版《2025 AI Index Report》全面解读
人工智能·数学建模·开源·云计算·知识图谱
金融小师妹6 小时前
基于AI通胀预期建模与能源冲击传导机制的政策分析:高频信号下的风险再评估
人工智能·svn·能源
胡摩西6 小时前
当大模型遇上毫米级定位:机器人将拥有“空间思维”?
人工智能·机器人·slam·gps·室内定位·roomaps