OpenCV Mat 实例详解 二

   构造函数

      OpenCV Mat实例详解一中已介绍了部分OpenCV Mat构造函数,下面继续介绍剩余部分构造函数。

Mat (const std::vector< _Tp > &vec, bool copyData=false);

vec 包含数据的vec对象

copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

下面新建一个控制台应用程序,来演示,该构造函数的使用,在新建程序中加入如下代码:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{vector<uchar> vec = {1,2,3,4,5,6,7,8,9};Mat tmp = Mat(vec, 1);if (tmp.empty())cout << "构建Mat对象失败!" << endl;elsecout << "构建Mat对象成功!" << endl;waitKey(0);return 0;}

试运行结果如下:

说明构建Mat对象成功。

Mat (const std::initializer_list< _Tp > list); 

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);initializer_list<uchar> list = { 1,2,3,4,5,6,7,8,9 };Mat tmp = Mat(list);if (tmp.empty())cout << "构建Mat对象失败!" << endl;elsecout << "构建Mat对象成功!" << endl;waitKey(0);return 0;}

试运行,结果如下:

Mat (const std::initializer_list< int > sizes, const std::initializer_list< _Tp > list);

sizes 构建对象维度参数(rows,cols)

list 包含数据对的list对象

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);initializer_list<int> list1 = {3,4};Mat tmp = Mat(list1,list);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;}

试运行,结果如下:

Mat (const std::array< _Tp, _Nm > &arr, bool copyData=false);

arr含有构建Mat对象数据的array对象

copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);//initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);//initializer_list<int> list1 = {3,4};array<uchar,12> arr = { 1,2,3,4,5,6,7,8,9,10,11,12 };Mat tmp = Mat(arr,1);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;
}

试运行,结果如下:

Mat (const Vec< _Tp, n > &vec, bool copyData=true);

vec包含构建Mat对象数据的Vec对象

 copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);//initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);//initializer_list<int> list1 = {3,4};//array<uchar,12> arr = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(arr,1);Vec<uchar,12> vec = { 1,2,3,4,5,6,7,8,9,10,11,12 };Mat tmp = Mat(vec, 1);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;
}

试运行,结果如下:

Mat (const Matx< _Tp, m, n > &mtx, bool copyData=true);

mtx含有构建对象数据的Matx对象

copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);//initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);//initializer_list<int> list1 = {3,4};//array<uchar,12> arr = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(arr,1);//Vec<uchar,12> vec = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(vec, 1);Matx<uchar,3,4> mtx = { 1,2,3,4,5,6,7,8,9,10,11,12 };Mat tmp = Mat(mtx, 1);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;
}

试运行,结果如下:

Mat (const Point_< _Tp > &pt, bool copyData=true); 

pt 含构建Mat数据的point对象,以point对象的x,y坐标作为Mat对象数据

copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);//initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);//initializer_list<int> list1 = {3,4};//array<uchar,12> arr = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(arr,1);//Vec<uchar,12> vec = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(vec, 1);//Matx<uchar,3,4> mtx = { 1,2,3,4,5,6,7,8,9,10,11,12 };Point_<int> point;point.x = 100;point.y = 100;Mat tmp = Mat(point, true);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;
}

试运行,结果如下:

Mat (const Point3_< _Tp > &pt, bool copyData=true)

pt 含构建Mat数据的point对象,以point对象的x,y,z坐标作为Mat对象数据

copyData 是否拷贝数据,true— 拷贝数据,false—不拷贝数据。

修改上面示例代码,来演示该构造函数的用法,修改后的代码如下:

// OpenCVMatTest2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//vector<uchar> vec = {1,2,3,4,5,6,7,8,9};//Mat tmp = Mat(vec, 1);//initializer_list<uchar> list = {1,2,3,4,5,6,7,8,9,10,11,12};//Mat tmp = Mat(list);//initializer_list<int> list1 = {3,4};//array<uchar,12> arr = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(arr,1);//Vec<uchar,12> vec = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Mat tmp = Mat(vec, 1);//Matx<uchar,3,4> mtx = { 1,2,3,4,5,6,7,8,9,10,11,12 };//Point_<int> point;Point3_<int> point;point.x = 100;point.y = 100;point.z = 100;Mat tmp = Mat(point, true);if (tmp.empty())cout << "构建Mat对象失败!" << endl;else{cout << "构建Mat对象成功!" << endl;cout << "构建Mat对象rows:" << tmp.rows << endl;cout << "构建Mat对象cols:" << tmp.cols << endl;}waitKey(0);return 0;
}

运行结果如下:

除了用上面的构造函数构建Mat对象外,还可以以下面方式构建并初始化Mat对象:

Mat tmp = (Mat_<uchar>(3,3)<< 1, 0, 0, 0, 1, 0, 0, 0, 1); 

Mat类的公共属性

 Mat类有一下公共属性:

MatAllocator *  allocator

int cols

uchar *  data

const uchar *  dataend

const uchar * datalimit

const uchar *  datastart

int  dims

int flags

int rows

MatSize  size

MatStep  step

UMatData *  u

Mat类对象的共公属性可以用.运算符访问.有部分属性已在前面的示例中使用过,这里就不再做介绍了。

        本篇博文示例是基于OpenCV4.8(opencv目录位于d盘根目录下)及VS2022。示例源码已上传到CSDN,其链接为:https://download.csdn.net/download/billliu66/88835162

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/259820.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【完全零基础】认知人工智能(一)【超级简单】的【机器学习神经网络】 —— 预测机

开个头 很多小伙伴们很想亲近人工智能与机器学习领域&#xff0c;然而这个领域里的核心理论、算法、工具给人感觉都太过“高冷”&#xff0c;让很多小伙伴们望而却步&#xff0c;导致一直无法入门。 如何捅破这层窗户纸&#xff1f; 让高冷的不再高冷&#xff0c;让神秘的不…

【软件设计师】程序猿需掌握的技能——数据流图

作为一个程序员&#xff0c;不仅要具备高水平的程序编码能力&#xff0c;还要是熟练掌握软件设计的方法和技术&#xff0c;具有一定的软件设计能力&#xff0c;一般包括软件分析设计图&#xff08;常见的有数据流图&#xff0c;程序流程图&#xff0c;系统流程图&#xff0c;E-…

儿时游戏“红色警戒”之“AI警戒”

一、红色警戒里“警戒”命令背后的算法原理是什么 在《红色警戒》系列即时战略游戏中&#xff0c;“警戒”命令背后的算法原理相对简单但又实用&#xff0c;其核心目标是让单位能够自动检测并反击一定范围内的敌方单位。虽然具体的实现细节未公开&#xff0c;但可以推测其基本…

0207-1-应用层

第 6 章 应用层 域名系统 DNS 域名系统概述 DNS 是一个分布式数据库&#xff0c;提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指&#xff0c;每个站点只保留它自己的那部分数据。 因特网的域名结构 域名具有层次结构&#xff0c;从上到下依次为&#x…

Opencv实战(1)读取与图像操作

Opencv 文章目录 Opencv一、读取图片1.imshow2.namedWindow3.imshow4.效果图 二、像素操作(1).访问像素1. at()2.Mat_ (2).遍历像素1.指针遍历2.迭代器遍历 (3).threshold(4).通道分离1.split2.merge (5)Gamma矫正 三、深浅拷贝 一、读取图片 1.imshow Mat imread(const stri…

关于Django的中间件使用说明。

目录 1.中间件2. 为什么要中间件&#xff1f;3. 具体使用中间件3.1 中间件所在的位置&#xff1a;在django的settings.py里面的MIDDLEWARE。3.2 中间件的创建3.3 中间件的使用 4. 展示成果 1.中间件 中间件的大概解释&#xff1a;在浏览器在请求服务器的时候&#xff0c;首先要…

腾讯云4核8G12M服务器支持多少人在线?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

基于SpringBoot的高校竞赛管理系统

基于SpringBoot的高校竞赛管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 个人中心 管理员界面 老师界面 摘要 高校竞赛管理系统是为了有效管理学校…

Open CASCADE学习|曲线向曲面投影

在三维空间中&#xff0c;将曲线向曲面投影通常涉及复杂的几何计算。这个过程可以通过多种方法实现&#xff0c;但最常见的是使用数学和几何库&#xff0c;如OpenCASCADE&#xff0c;来处理这些计算。 在OpenCASCADE中&#xff0c;投影曲线到曲面通常涉及以下步骤&#xff1a;…

数据库所在服务器磁盘满了怎么办?

大家好&#xff0c;我是G探险者。 给大家拜个晚年哈&#xff0c;节后上班第一天&#xff0c;打开电脑&#xff0c;发现数据库服务器连不上了。 幸亏&#xff0c;节后第一天上班的人不太多&#xff0c;领导还没来&#xff0c;我一番鼓捣解决了这个问题。 所以做个总结&#xff0…

项目02《游戏-14-开发》Unity3D

基于 项目02《游戏-13-开发》Unity3D &#xff0c; 任务&#xff1a;战斗系统之击败怪物与怪物UI血条信息 using UnityEngine; public abstract class Living : MonoBehaviour{ protected float hp; protected float attack; protected float define; …

为什么有的代理IP速度比较慢?

“为什么有的IP代理速度比较慢&#xff1f;”随着数字化时代的不断发展&#xff0c;代理服务成为了许多网络操作的关键环节。然而&#xff0c;有时我们可能会遇到IP代理速度慢的问题&#xff0c;这可能会对我们的网络操作产生影响。让我们一起揭开这个谜团&#xff0c;探寻其中…

【JavaScript】面试手写题精讲之数组(下)

引入 这章主要讲的是数组的排序篇&#xff0c;我们知道面试的时候&#xff0c;数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题&#xff0c;大概可以分为如下 冒泡排–> 稳定排序插入排序–> 稳定排序选择排序–…

第五次作业:LMDeploy 的量化和部署

参考文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 基础作业&#xff1a; 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事&#xff08;需截图&#xff09; …

MAC电脑系统清理空间免费版软件CleanMyMac X2024

大家好&#xff0c;我是那个总是被苹果电脑“内存已满”提示搞得焦头烂额的专业博主。如果你也像我一样&#xff0c;在使用Mac时经常遭遇卡顿、慢吞吞的情况&#xff0c;那么今天的Mac清理空间妙招分享绝对适合你&#xff01; CleanMyMac X全新版下载如下: https://wm.makedi…

【HTML】SVG实现炫酷的描边动画

前沿 今天闲来无事&#xff0c;看到Antfu大佬的个性签名&#xff0c;觉得还是非常炫酷的&#xff0c;于是也想要搞一个自己的个性签名用来装饰自己的门面&#xff0c;不过由于手写的签名太丑了&#xff0c;遂放弃。于是尝试理解原理&#xff0c;深入研究此等密法&#xff0c;终…

基于Springboot的新能源充电系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的新能源充电系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

ZigBee学习——基于AF的数据通信

文章目录 一、简单描述符1.1 简单介绍1.2 简单描述结构体介绍1.3 结构体中的簇1.4 应用场景 二、AF通信原理2.1 通信过程2.2 端点号分类2.3 通信方式2.4 注册简单描述符 三、数据发送API简介3.1 AF层数据发送API3.2 基于AF层封装的通信API3.2.1 点对点通信API3.2.2 广播通信API…

Linux------环境变量

目录 前言 一、环境变量 二、添加PATH环境变量 三、HOME环境变量 四、查看所有环境变量 1.指令获取 2.代码获取 2.1 getenv 2.2main函数的第三个参数 2.3 全局变量environ 五、环境变量存放地点 六、添加自命名环境变量 七、系统环境变量具有全局属性 八、环境变…