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…

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

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

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

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

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

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

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;就是一个班级…

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

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

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;继承多态等面向对象的三大特性。主要是为了让我们能够更好的使用之前学到的知识。 接下来给大家讲解一下这个项目的一个特点。首…

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…

OpenGL-ES 学习(4)---- OpenGL-ES 坐标体系

坐标体系 我们知道 OpenGL -ES 坐标系中每个顶点的 x&#xff0c;y&#xff0c;z 坐标都应该在 -1.0 到 1.0 之间&#xff0c;超出这个坐标范围的顶点都将不可见。 将一个物体&#xff08;图像&#xff09;渲染到屏幕上&#xff0c;通常经过将物体坐标转换为标准化设备坐标&am…

蓝牙BLE学习-GAP

1.概述 GAP层&#xff08;Generic access profile-通用访问配置文件&#xff09;。GAP是对LL层payload&#xff08;有效数据包&#xff09;如何进行解析的两种方式的一种&#xff0c;而且也是最简单的一种。GAP简单的对LL payload进行一些规范和定义&#xff0c;因此GAP能实现的…

(三十八)大数据实战——Atlas元数据管理平台的部署安装

前言 Apache Atlas 是一个开源的数据治理和元数据管理平台&#xff0c;旨在帮助组织有效管理和利用其数据资产。为组织提供开放式元数据管理和治理功能 &#xff0c;用以构建其数据资产目录&#xff0c;对这些资产进行分类和管理&#xff0c;形成数据字典 。并为数据分析师和数…

深度学习之反向传播算法

反向传播算法 数学公式算法代码结果 算法中一些函数的区别 数学公式 算法代码 这里用反向传播算法&#xff0c;计算 y w * x模型 import numpy as np import matplotlib.pyplot as ply#反向传播算法&#xff0c;需要使用pytorch框架&#xff0c; #这里导入pytorch框架&#xf…

MySQL 基础知识(四)之表操作

目录 1 约束 2 查看已有表 3 创建表 4 查看表结构 5 修改表 6 删除表 1 约束 主键约束 primary key&#xff1a;唯一&#xff0c;标识表中的一行数据&#xff0c;此列的值不可重复&#xff0c;且不能为 NULL&#xff0c;此外&#xff0c;可以多个列组成主键唯一约束 uniq…

Phobos捆绑某数控软件AdobeIPCBroker组件定向勒索

前言 Phobos勒索病毒最早于2019年被首次发现并开始流行起来&#xff0c;该勒索病毒的勒索提示信息特征与CrySiS(Dharma)勒索病毒非常相似&#xff0c;但是两款勒索病毒的代码特征却是完全不一样&#xff0c;近日笔者在逛某开源恶意软件沙箱的时候发现了一款Phobos勒索病毒捆绑…

Windows编程环境配置!

喜欢的话麻烦大家多点点关注&#xff0c;谢谢&#xff01; 原文地址&#xff1a;Windows编程环境配置&#xff01; - Pleasure的博客 下面是正文内容&#xff1a; 前言 近期闲来无事&#xff0c;就想着把Windows系统中的环境给完善整理一下。方便后续码字时的不时之需。 正文…

百度云AI

百度云AI概述 Face腾讯优图科大讯飞 百度人脸识别基于深度学习的人脸识别方案&#xff0c;准确识别图片中的人脸信息&#xff0c;提供如下功能&#xff1a; 人脸检测&#xff1a;精准定位图中人脸&#xff0c;获得眼、口、鼻等72个关键点位置&#xff0c;分析性别、年龄、表…