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

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

    

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

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

相关文章

数据分析案例-基于亚马逊智能产品评论的探索性数据分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

C语言练习-----求和Sn=a+aa+aaa+aaaa+aaaaa.............

int main() {int m 0;int n 0;scanf("%d %d", &m, &n);int sum 0;int i 0;int k 0;for (i 0; i < n; i){k k * 10 m;sum sum k;}printf("%d", sum);return 0; } 我们这里不考虑过大的数字&#xff0c;否则会越界&#xff1b; m代表…

亿级推送,得物是怎么架构的?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;需要织入亮点项目、黄金项目。 前段时间&#xff0c;指导小伙写了一个《高…

假期2.13

1、选择题 1.1、若有定义语句&#xff1a;int a[3][6]; &#xff0c;按在内存中的存放顺序&#xff0c;a 数组的第10个元素是 D A&#xff09;a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 1.2、有数组 int a[5] {10&#xff0c;20&#xff0c;30&#xff0c;40&#xff0c;50…

AI在工业物联网(IIoT)中的安全管理与应用

在开放的工业互联网环境中&#xff0c;数百万个基于物联网的终端和中间设备&#xff0c;需要全天候地持续通信并保持在线状态。不过&#xff0c;这些设备往往由于最初设计上的限制&#xff0c;在机密性、完整性、可用性、扩展性、以及互操作性上&#xff0c;存在着各种安全漏洞…

关于jupyter的一些小笔记

关于jupyter的一些小笔记 1.Jupyter Notebook&#xff1a;单/多行注释&#xff0c;组合键&#xff1a;选中代码&#xff0c;按Ctrl /。 2.安装PHATE包 使用pip直接进行安装 pip install --user phate成功解决AttributeError: module ‘numpy’ has no attribute ‘float’. 报…

Unity实现文字转语音并且与人物模型口型同步

文章目录 前言一、插件介绍二、导入RTVoice1.插件传送门2.组件配置 三、导入OVRLipSync1.插件传送门2.组件配置 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天我们用Unity实现文字转语音并且与人物模型口型同步&#xff0c;要实现这个功能&a…

MongoDB聚合:$project

$project聚合阶段可将输入文档根据请求的字段输出到管道的下个阶段&#xff0c;输出的字段可以是输入文档中的字段&#xff0c;也可以是新的计算字段。 语法 { $project: { <specification(s)> } }$project聚合接受一个文档参数&#xff0c;可以指定包含的字段&#xf…

Java安全 CC链6分析

CC链6分析 前言CC链分析核心transform链Lazymap类TiedMapEntry类HashMap方法 最终exp 前言 CC链6不受jdk版本与cs版本的影响&#xff0c;在Java安全中最为通用&#xff0c;并且非常简洁&#xff0c;非常有学习的必要&#xff0c;建议在学习CC链6之前先学习一下 URLDNS链 和 CC…

创建良好班风的重要性和意义

为什么有的班级总是充满活力&#xff0c;学生们团结友爱、学习热情高涨&#xff0c;而有的班级却显得沉闷&#xff0c;学生们缺乏动力&#xff0c;对学习毫无兴趣&#xff1f;其实&#xff0c;这背后的关键就在于班风的建设。 班风&#xff0c;简单说&#xff0c;就是一个班级…

【机器学习案例2】使用 plaidML在 macOS利用GPU进行机器学习【含源码】

想要在 Mac 的集成 AMD GPU 或外部显卡上训练机器学习模型? PlaidML 就是您的最佳选择。 任何尝试过在 macOS 上使用 TensorFlow 训练神经网络的人都知道这个过程有点糟糕。 TensorFlow 只能利用 Mac 上的 CPU,因为 GPU 加速训练需要 Nvidia 芯片组。大多数大型模型在 CPU 上…

IDEA在package下右键,没有new选项

正常情况下如下图&#xff0c;我们在文件夹上右键&#xff0c;是会出现New选项的。 但是今天我尝试将" add frameworks support"添加到右键时&#xff0c;竟然把New都删除了。如下图 搜遍全网&#xff0c;结果搜到的都是为什么在package或者文件夹上右键出现的Ne…

Linux网络操作系统期末系统复习题

一、填空题 1. GUN 的含义是 一个自由的操作系统。 2. Linux 一般有 3 个主要部分&#xff1a; 内核、命令解释层 、实用工具 。 3. 目前被称为纯种的UNIX指的就是System V以及BSD这两套操作系统。 4. Linux是基于Copyleft的软件模式进行发布的&#xff0c;它是GNU项目…

springboot185基于vue.js的客户关系管理系统(crm)的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【Linux技术宝典】深入理解Linux基本指令:命令行新手指南

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅Linux技术宝典 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、Linux下基本指令1. ls 指令2. pwd指令3. clear指令4. cd指令什么是家目录&#xf…

基于AI Agent探讨:安全领域下的AI应用范式

先说观点&#xff1a;关于AI应用&#xff0c;通常都会聊准召。但在安全等模糊标准的场景下&#xff0c;事实上不存在准召的定义。因此&#xff0c;AI的目标应该是尽可能的“像人”。而想要评价有多“像人”&#xff0c;就先需要将人的工作数字化。而AI Agent是能够将数字化、自…

java基础实现的图书管理系统

文章目录 项目介绍项目功能代码讲解如何实现不同用户之间的操作权限不同 项目介绍 该项目是用的是javase的一些知识包括了类和对象封装&#xff0c;继承多态等面向对象的三大特性。主要是为了让我们能够更好的使用之前学到的知识。 接下来给大家讲解一下这个项目的一个特点。首…

面试计算机网络框架八股文十问十答第六期

面试计算机网络框架八股文十问十答第六期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;DNS 协议是什么 D…

31.File文件

File文件 1. 概述2. 构造方法2.1 方法2.2 代码示例 3. 成员方法3.1 判断、获取的方法3.1.1 方法3.1.2 代码示例 3.2 创建、删除的方法3.2.1 方法3.2.2 代码示例 3.3 获取、遍历的方法3.3.1 重点方法3.3.1.1 方法3.3.1.2 代码示例 3.3.2 所有方法3.3.2.1 方法3.3.2.2 代码示例 4…

《Docker快速入门:从0到1构建你的第一个容器!》

《Docker快速入门&#xff1a;从0到1构建你的第一个容器&#xff01;》 前言 欢迎来到Docker的世界&#xff0c;一个让应用程序打包、部署和运行更加容易的神奇平台。Docker改变了我们对于应用开发和分发的看法&#xff0c;它通过容器技术让软件的携带和运行变得前所未有的轻…