opencv的mat openvino的tensor libtorch的tensor

news2025/1/13 17:42:27

opencv的mat

对于矩阵数据,在opencv里面是通过使用mat这个数据结构来实现的,我觉得这个数据结构本身设计是用来做图片的存储,所以很多的教程都是关于三维矩阵的(其中一个维度是channel),关于三维矩阵的定义、读取、写入等操作的博客也有很多。而我这次遇到的问题主要是关于不带channel的三维矩阵以及四维矩阵的一些操作。
在说具体内容之前,先说一下这个mat类型是这样的,它和矩阵数据类型相比之外,还有一个channel这个维度,所以在定义、读取、写入的时候一般需要考虑这个维度,进行相应处理。

定义

mat建立 关于mat矩阵的建立可以参考这篇文章,这里建立的时候,有几个参数需要说明一下,就是这个(CV_8UC1// 8位无符号单通道 CV_8UC3// 8位无符号3通道 等等)这些,还有很多取值,这里这个参数是可以加也可以不加的,对于图片,一般是图片,存在三个通道的问题,所以可以加,如果我们只是用mat矩阵来表示一个矩阵,而这个矩阵,只是用来存储数据,并不表示实际的图片,直接定义矩阵的维度和各个维度的大小,以及数据的类型即可。
在这里插入图片描述
阅读一下这张图,这是我其他博客截的,我想说明一个问题,mat类型是包含信息头和存储数据的信息体的,通常的赋值操作只能相当于c++的浅拷贝,也就是说里面的信息体还是同一块内存,对赋值前和赋值后的变量进行操作,都是对同一块内存进行操作,显然赋值前后的变量都会受到影响。要想新开辟一个内存区域的话,需要使用clone()克隆函数和copyTo()拷贝函数。具体内容可以看这篇文章 这篇博客里面还有很多关于mat的一些基本操作函数的说明。

读取和写入

mat的读取关于读取,这篇文章说的很全面了,介绍了三种方法,我也没有完全实践过,第一种通过at访问和第二种通过ptr访问我的代码中是直接用了的,可以跑的通,第二种ptr访问用于四维矩阵。高维矩阵的访问 在这篇文章里面,说明了各个维度的矩阵建议用什么方式去访问,我验证了,是可以行得通的,可以参考。
说回第一篇文章里面的东西,建议看的时候注意对于最后一个维度的处理,在这里面,如果我们的数据是图片的话,最后一个维度是channel,但是如果不是图片的话,最后一个维度或许就没有特殊的含义,就是一个维度的数据而已,这时候按照正常的维度对待即可,没有特殊的含义了,但是对最后一个维度的访问方式,还是建议按照博客中的方式,比较建议,这个应该是这里的惯例,代码中的cv::Vec3f指的是取出一个vector数组,里面有三个float类型元素,如果你的最后一个维度不止三个,那这个类型就不行了, 需要使用原始的某个类型去直接取出来。关于这几种访问方式的速度问题,暂时还没有结论。

openvino的tensor

关于openvino 这是一个推理的工具,OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件。这个工具比较好用,当然了还有tensorRT等其他大厂推出的工具。关于它的使用,有官方文档说的很好。1 2 关于它的使用,主要是现在的版本已经提供了预处理功能,不需要我们自己去写预处理那一块的代码,它自身提供了关于输入的例如通道交换、resize、数据类型转换、颜色通道顺序改变等常用功能。在文档里面搜索,也可以查到。这个极大的简化了我们代码中自己需要写的预处理函数部分。
在这里插入图片描述接下来就是推理,
在这里插入图片描述
这个很简单,就是几行代码的事情。所以这个框架的使用还是比较简单的,安装好了,一些自带的接口用一下就好了。

libtorch的tensor

libtorch是大家熟知的pytorch的C++版本,基于这个框架可以用来实现一些C++版本的网络模型。不过还是比较麻烦的,因为有一些函数只在pytorch里面才有,并且python有很多的第三方库,c++就没有,这就导致了很多代码模块的实现起来很不方便。
关于libtorch tensor的常见操作可以参考这几篇博客:1 2 3
这是一个需要注意的不同之处。
在这里插入图片描述
这几篇博客,基本都说了libtorch的函数以及用法,如果还没有的,可能需要自己搜一下,或者就是libtorch就是不提供这个接口。

opencv的mat openvino的tensor libtorch的tensor的互相转换

libtorch的tensor和opencv的mat的互相转换

如果你在写C++的网络模型,很多时候我们需要借助opencv类来进行很多图像或者是矩阵的操作,因为这个类提供的接口比libtorch多,那么这就涉及到两种矩阵存储类型之间的转换了,opencv的mat结构和libtorch的tensor之间是可以转换的。但是这里需要指出的是,这里的转换不适用于存储图片的情形,存储图片的时候,前面第一节关于mat的部分也都说了,会涉及到通道这个维度,以及这个维度处于矩阵哪一维的情况,那是专门的一种转换方式。这个网上也有很多,可以自己找一找。因为我这边模型推理的时候是先转换为openvino的tensor来进行的,所以没有图片mat转libtorch tensor的情况。

如下,这个图展示的就是libtorch tensor转换为cv::mat的情况,这里的mid_output_tensor是一个libtorch的tensor.最终转换为了mid_output_Mat这个mat类型的矩阵。
在这里插入图片描述

如下这个代码就实现了从cv::mat转换为dist_tensor的操作。

	torch::Tensor dist_tensor = torch::zeros({ B,H,W }, torch::kFloat);
	int size132[3] = { B,H,W };
	cv::Mat dist_mat(3, size132, CV_32FC1);
	dist_tensor = torch::from_blob(dist_mat.data, { B,H,W }, torch::kFloat);

opencv的mat转换为openvino的tensor

在opencv中输入的图片是cv::mat,在推理之前,需要转换为openvino的tensor,
在这里插入图片描述通过这个函数,可以把输入的imgs转换为input_tensor. 实质上是把内存中的区域给了input_tensor这个变量。

openvino的tensor转换为libtorch的tensor

当推理完了之后,输出的结果是openvino tensor,如果还有进行很多的后处理,那么openvino tensor很可能不合适,因为它自带函数很少,没有libtorch tensor自带的函数多。转换可以使用以下的方法。
在这里插入图片描述get_output_tensor是获得推理输出结果的函数,参数0是第一个结果,如果就一个结果,就不需要加参数。

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

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

相关文章

通讯录小练习:柔性数组和文件操作实现

目录 一.程序功能 二.定义关键类型的头文件与枚举的应用 三.封装柔性数组的增容函数与缩容函数 四.添加联系人功能模块 五 .联系人信息打印模块 六. 查找指定联系人的模块 七.删除指定联系人模块 八.修改指定联系人信息模块 九.排序模块 九.文件操作模块 十.通讯录初…

如何实现外网远程登录访问jupyter notebook?

Jupyter Notebook是一个交互式笔记本,本质是一个 Web 应用程序,支持运行 40 多种编程语言,此前被称为 IPython notebook。Jupyter Notebook 便于创建和共享程序文档、支持实时代码、数学方程、可视化和 markdown,应用场景有数据清…

机器学习基础——k-近邻算法概述和简单实现

本章内容 k-近邻分类算法 从文本文件中解析数据 前言 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问题。没有哪个电影人…

Revit问题:降板表面填充图案和构件上色

一、Revit中如何为降板表面填充不同的图案 在平面图中该如何利用填充图案来区别降板跟楼板? 1、中间的楼板为降板(120)/-150mm,下面我们通过“过滤器”来为其填充表面图案。 2、通过快捷键VV打开“可见性/图形替换”对话框,单击选择“过滤器”一项。 3、…

2023/1 寒假期间自学c++计划安排

寒假一期学习总结 寒假一期学习是在线下进行的,总的来说,非常充实,也很有收获,成体系的学习了 二分,高精度,函数,结构体,STL 等等内容,既开心有学到了知识。 在这7天的集…

最新ios证书申请流程

苹果官方申请ios证书的方法,需要mac电脑,需要使用钥匙串管理先生成csr文件,然后去苹果开发者中心生成证书,然后再用mac电脑导出p12证书。假如我们没有mac电脑,又如何申请证书呢?这个教程我将教会大家如何使…

从汇编的角度了解C++原理——类的储存结构和函数调用

本文用到的反汇编工具是objconv,使用方法可以看我另一篇文章https://blog.csdn.net/weixin_45001971/article/details/128660642。 1、类的储存结构和函数调用 以这段代码为例。 编译后对obj文件反汇编,得到以下汇编代码,配合常量的值来分…

大数据技术架构(组件)——Hive:环境准备2

1.0.1.5、Mysql安装1.0.1.5.1、软件包下载解压缩官网或者直接从百度云盘中下载即可。https://dev.mysql.com/downloads/mysql/1.0.1.5.2、环境变量配置1.0.1.5.2.1、创建系统环境变量MYSQL_HOME1.0.1.5.2.2、将系统环境变量配置到Path上1.0.1.5.2.3、生成Data文件使用系统管理员…

【MySQL进阶教程】MySQL管理

前言 本文为 【MySQL进阶教程】MySQL管理 相关知识,下边将对系统数据库,常用工具(包括:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport/source)等进行详尽介绍~ 📌博主主页&#xff…

开发微信小程序过程中遇到的问题笔记

时间绑定bindtap的基础用法 <view id"tapTest" data-hi"WeChat" bindtap"tapName"> Click me! </view>这里要注意的是data-xxx中的xxx需要小写&#xff0c;否则获取不到。 使用for循环的时候&#xff0c;这种方法是拿不到数据的。 …

系统分析师案例必备知识点汇总---2023系列文章三

系统设计 1、面向对象设计 分析类图是从用户的角度出发得到的业务“系统”&#xff0c;而设计类图更多的是从系统、软件的角 度来描述和表达系统。二者具体的区别&#xff1a; 分析类图&#xff1a;在需求分析阶段&#xff0c;类图是研究领域中的概念&#xff1b;分析类图主要…

C语言实现密码检查

这道题目并不算难&#xff0c;实现时可能会写出一些bug&#xff0c;需要耐心去调试。有两种方法&#xff0c;首先这些题目要求可以频繁使用字符串的库函数&#xff0c;这里不介绍这些库函数&#xff0c;我的方法是直接比较阿斯克码值的大小进行删选&#xff0c;频繁使用if语句。…

模板的补充

1. 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成…

【ElasticSearch01】ElasticSearch入门

目录1.数据类型2.Elasticsearch是什么3.全文搜索引擎4.Elasticsearch安装5.Restful和JSON6.Postman客户端工具7.倒排索引8.Elasticsearch基本操作8.1 索引操作8.1.1 创建索引8.1.2查询索引1.查询指定索引2.查询所有索引8.1.3删除索引8.2 文档操作8.2.1 创建文档8.2.2 创建文档时…

力扣 2287. 重排字符形成目标字符串

题目 给你两个下标从 0 开始的字符串 s 和 target 。你可以从 s 取出一些字符并将其重排&#xff0c;得到若干新的字符串。 从 s 中取出字符并重新排列&#xff0c;返回可以形成 target 的 最大 副本数。 示例 输入&#xff1a;s “ilovecodingonleetcode”, target “co…

人工智能入门基础概念—教你正确打开人工智能世界的大门

一、机器学习 1.1机器学习概述 机器学习简介 机器学习&#xff0c;通俗地讲就是让机器拥有学习的能力&#xff0c;从而改善系统自身的性能。 这里的“学习”指的是从数据中学习&#xff0c;从数据中产生模型的算法&#xff0c;即学习算法。有了学习算法&#xff0c;只要把经验…

力扣(131.93)补9.21

131.分割回文串 又是不会做的一题呢。 代码看起来不难&#xff0c;但想出代码还是很难得。 class Solution { public List<List<String>> partition(String s) { List<List<String>> ansnew ArrayList<>(); List<String> listnew ArrayLis…

Python学习笔记-PyQt6对话框

对话框是界面编程中重要的窗体&#xff0c;一般用于提示或者一些其他特定操作。一、使用QDialog显示通用消息框直接使用QDialog类&#xff0c;可以及通过对话框进行通用对话框显示&#xff0c;亦可以通过自定义设置自己需要的对话框。# _*_ coding:utf-8 _*_import sysfrom PyQ…

自动驾驶专题介绍 ———— 超声波雷达

文章目录介绍工作原理特点常见参数介绍 在汽车碰撞事故中&#xff0c;有大约15%的事故是因为倒车时汽车的后视能力不足引起的&#xff0c;因为增加汽车的后视能力的超声波雷达的研究成为了当下的热点之一。安全避免碰撞的前提是快速准确的测量障碍物于汽车之间的距离。超声波雷…

小白必看!用JMeter+ANT进行接口自动化测试,并生成HTML测试报告

小伙伴们&#xff0c;用python做接口自动化是不是写代码比较繁琐&#xff0c;而且没有python代码基础的小伙伴根本无从下手对吧&#xff01;今天我们来学习一下如何使用JMeter工具实现接口自动化测试。 01 安装 1、安装JDK&#xff0c;配置java环境变量&#xff08;安装过程略…