当前位置: 首页 > article >正文

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

初始化

常量赋值初始化

cv::Mat m = (cv::Mat_<float>(3,1) << 1, 2, 1.0);

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

cv::Mat m(int rows, int cols, int type);
cv::Mat m(cv::Size sz, int type);

初始化值均为0

//二维数组,类型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); // 单位矩阵

数组赋值

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);

指定类型多维数组

 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);
//使用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指针进行访问

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);
	 }
 }

http://www.kler.cn/a/382576.html

相关文章:

  • 网页前端开发之HTML入门篇:表格标签 table
  • 和的逆运算问题
  • 初识C++(上) -- C++的关键字、命名空间、缺省参数以及函数的重载
  • 跟着小土堆学习pytorch(六)——神经网络的基本骨架(nn.model)
  • 揭秘云计算 | 2、业务需求推动IT发展
  • 老域名seo有什么优势?
  • 野火PID调试助手由HAL库移植到标准库
  • 蓝桥杯第21场小白入门赛补题
  • FastDDS服务发现之PDP的收发
  • 【线程与并发】详谈 可见性,有序问题
  • Spring Boot 与 Vue 共筑畅销图书推荐卓越平台
  • C#-类:静态成员的介绍
  • LaTeX中的\pdfoutput命令:输出PDF
  • android 使用xml设置背景图片和圆角
  • 新兴好用办公软件,协作效率翻倍就用它了!ONLYOFFICE最近发布了文档8.2版本
  • 猫用宠物空气净化器推荐,希喂,美的哪款除毛好、噪音小?
  • dolphin 配置data 从文件导入hive
  • 智慧水肥一体化:道品科技现代农业的智能管理模式
  • 印度高速升降机行业深度分析及未来预测
  • Echats柱状图的横坐标用图片显示
  • Python机器学习:分类器决策函数详解
  • 【jvm】堆空间分代思想
  • Renesas R7FA8D1BH (Cortex®-M85) Flash的功能介绍
  • 美畅物联丨物联网通信新纪元:Cat.1与5G RedCap的差异化应用
  • [linux驱动开发--读设备树] 基于qemu9.1+linux内核6.11.0
  • Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数