OpenCVForUnity(二)基本图像容器Mat

news2024/11/18 2:51:36

这里写目录标题

  • 前言
  • Mat
  • 指针引用说明
  • 存储的方式
  • 如何创建一个Mat对像

前言

今天继续学习OpenCV的基本单位Mat.

学计算机的同学都知道在计算机中,你所看到的一切其都是数据的呈现.期最底层的本质皆是0和1的构成的.当然图片,视频等等也不例外.我们用相机,扫描仪核磁共振成像等方式所获取到的数据,在计算机中都以数值的方式记录画面中每个点的数值.关于

Mat

一、Mat不需要手支分配内存,并在不需要它时立即释放它.在OpenCV功能将自动分配输出数据.

二、如果你传递一个已分配空间的Mat文件,这个空间将被复用.

三、Mat结构有两个部分:
1.矩阵头(用于记录大小,存储方式,地址等.)
2.包含像素(用于记录具体数据) 头文件大小是固定的,而具体数据则不是.

OpenCV包含了大量的图像处理功能,可以图像处理对计算机带来的挑战.当我们将图像交给插件处理时,切不可忘记图片处理背后的原理也非常值得学习.同时应避免使用过大图像进行计算,这样将容易达到性能瓶颈造成卡顿.

指针引用说明

OpenCV使用引用计数系统.每个Mat对像都有自己的头,通过使它们的矩阵指针指向相同的地址.他们可同共享这这个地址,而复制操作则只是复制指针,而不是数据本身.

Texture2D imgTexture = Resources.Load("AA") as Texture2D;
Mat A = new Mat(imgTexture.height, imgTexture.width, CvType.CV_8UC4);
Mat B = new Mat(A, new Range(0, A.rows()), new Range(0, A.cols()));
Mat C = A;
//图片写入Mat
Utils.texture2DToMat(imgTexture, A);
//创建图片
Texture2D textureA = new Texture2D(A.cols(), A.rows(), TextureFormat.RGBA32, false);
Texture2D textureB = new Texture2D(B.cols(), B.rows(), TextureFormat.RGBA32, false);
Texture2D textureC = new Texture2D(C.cols(), C.rows(), TextureFormat.RGBA32, false);
//将Mat的图片写入Texture2D中
Utils.matToTexture2D(A, textureA);
Utils.matToTexture2D(B, textureB);
Utils.matToTexture2D(B, textureC);
//显示出图片
objA.GetComponent<Renderer>().material.mainTexture = textureA;
objB.GetComponent<Renderer>().material.mainTexture = textureB;
objC.GetComponent<Renderer>().material.mainTexture = textureC;

运行结果:
在这里插入图片描述

以上例子中,Mat的头部不同.但因为都指向同一个矩阵,修改其中一个时其他也是会受到影响.

你可以询问矩阵本身属于多少个Mat,当它不再需要时可以清理它.当有人复制他时矩阵引用计数器会增加.
当有头部被清理时会减少.当引用为0时矩阵将被释放.
OpenCV()也为此提供了clone和copyTo()函数.

存储的方式

我们关于存储像素值的问题,可以有好几种选择。首先是颜色空间,就是我们怎样把颜色分量结合在一起来描述一个颜色。最简单的是灰度,我们只用黑白来组合就行。

其他常见的颜色空间都是由三四个基本分量组成的,咱们可以用它们来创建其它分量。最常见的是RGB,因为人类眼睛也是这样看颜色的。

红、绿、蓝。还有的颜色空间可能会加上alpha分量,用于编码透明度。不过,还有很多其他颜色系统都有自己的优点,RGB用得最广,因为咱们的眼睛也就是这样识别颜色的。

不过要记住,OpenCV标准显示系统用的是BGR颜色空间(红色、蓝色通道顺序相反)。

HSV和HLS把颜色划分为色调、饱和度、明度分量,更符合我们描述颜色的方式。

比如,如果你忽略掉明度分量,那你的算法会对输入图像的光线条件不敏感。
YCrCb是JPEG图像格式常用的颜色系统。

每个颜色分量都有自己的有效范围,这就决定了咱们可以用哪些数据类型来存储颜色。所用数据类型的最小可能值是char(也就是一个字节或者8位)。

char型可以是无符号的0~255或者是有符号的-127 至 127。虽然在三个分量的情况下,char型就可以提供1600万种颜色表示方式(就跟我们在RGB情况下说的一样),但如果想要更精细地控制每个分量,那就得使用浮点数(4字节=32位)或double类型(8字节=64位)了。不过要记住,增加分量大小就会增加整个图像在内存中占用的体积哦。

如何创建一个Mat对像

前面我们已经演示过如何装图像文件写入Mat矩阵中.为了更直观方便,可以使用操作符来操作.公适用于二维矩阵.

Mat A = new Mat(512, 512, CvType.CV_8UC4, new Scalar(0,0,255,255));

对于二维矩阵首先我们要明确他的行(rows)和列(cols),这里都写的512.
然后指定了了通道数这里使用了4通道CV_8UC4.意思是: 使用8位长的无符号字符类型,每个像素有四个形成四个通道(最多四个通道)

同上面的方法转为图片后,运行结果:
在这里插入图片描述

具体的使用我们在后面的案例中继续讲解…

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

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

相关文章

OpenAI深夜放大招,GPT4 API全面开放并弃用一系列旧模型

GPT-4 API 现已向所有付费 OpenAI API 客户开放。GPT-3.5 Turbo、DALLE 和 Whisper API 现已普遍可用&#xff0c;我们宣布了一些旧型号的弃用计划&#xff0c;这些型号将于 2024 年初退役。 ✅ GPT4 API面向付费用户开放&#xff0c;不需要再额外申请,并且具有8K上下文&#…

bash文件输入到txt文件中

bash test_bct.sh >> test.txt结果如下

WeeChat 4.0.0 正式发布

导读WeeChat (Wee Enhanced Environment for Chat) 是一款自由开源的轻量级 IRC 客户端&#xff0c;具有高度的可定制特性&#xff0c;并且可以通过脚本进行扩展。 WeeChat 支持大多数的平台和操作系统&#xff0c;例如 Linux、BSD、macOS、Debian GNU/Hurd、HP-UX、Solaris、…

全国产化适配低代码平台,政企数字化的不二选择

编者按&#xff1a;在国家政策及战略方向的指导下&#xff0c;信创产业已成为奠定中国未来发展的重要数字基础&#xff0c;而国产化则可以解决核心技术关键被“卡脖子”的问题。另一方面&#xff0c;低代码平台能够为企业加速交付业务应用&#xff0c;降低运营成本&#xff0c;…

插入排序(思路+代码)

变量&#xff1a; index &#xff1a;代表待插入数的前一个数的下标&#xff0c;依次往回找&#xff0c;找到找到结果。 indexvalue&#xff1a;代表待插入元素的值&#xff0c;找到位置之后往index1的位置插入元素 代码&#xff1a; import java.util.Arrays;public class …

【库表操作】

一、数据库Market中创建表customers 1、创建数据库 #创建数据库 mysql> create database Market; mysql> use Market;2、创建数据表 #创建数据表 mysql> create table customers(-> c_num int(11) primary key auto_increment,-> c_name varchar(50),-> c_…

iOS-配置Universal Links通用链接

1、开启Associated Domains服务 登录苹果开发者网站&#xff0c;在Certificates, Identifiers & Profiles页面左侧选择Identifiers&#xff0c;右侧选择对应的App ID&#xff0c;点击进入配置详情页&#xff0c;开启Associated Domains服务&#xff1b; 2、更新Profile文件…

【动手学习深度学习--逐行代码解析合集】09权重衰减

【动手学习深度学习】逐行代码解析合集 09权重衰减 视频链接&#xff1a;动手学习深度学习–权重衰减 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 0、准备工作 import matplotlib # 注意这个也要import一次 import matplotli…

Wordpress的mysql迁库遇到问题

在我们迁移库的时候经常会出现如下问题&#xff1a; 5.7日期默认0000-00-00 00:00:00 设置错误。 MySQL默认设置中不支持日期datetime格式下的0000-00-00 00:00:00。 解决方法如下&#xff1a; select sql_mode 来查看对应内容 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO…

vue打包后,生成的dist文件出现浏览器缓存问题——技能提升

最近同事问我&#xff0c;打包后的项目放在服务器上后&#xff0c;在终端打开时&#xff0c;必须清除浏览器缓存也就是ctrlF5才可以。 我打包后查看dist/index.html文件 发现没有css和js文件都有不同版本号的标识&#xff0c;按道理来说&#xff0c;是不会出现这个缓存的问题…

在Chrome谷歌浏览器中执行JavaScript的方法

在Chrome谷歌浏览器中如何执行JavaScript&#xff1f;在Chrome 浏览器中可以通过按下 F12 按钮或者右击页面&#xff0c;选择"检查"来开启开发者工具。 也可以在右上角菜单栏选择 "更多工具"》"开发者工具" 来开启&#xff1a; 1、Console 窗口调…

基于机器学习的情感分析

1基于机器学习 是指选取情感词作为特征词&#xff0c;将文本矩阵化&#xff0c;利用logistic Regression, 朴素贝叶斯(Naive Bayes)&#xff0c;支持向量机&#xff08;SVM&#xff09;等方法进行分类。最终分类效果取决于训练文本的选择以及正确的情感标注。 在训练过程&#…

骨传导耳机音质怎么样,盘点在音质方面表现不错的五款骨传导耳机

骨传导耳机凭借不入耳就能轻松听音乐的特点&#xff0c;被越来越多人所认识&#xff0c;相比传统的入耳式耳机&#xff0c;骨传导耳机拥有更多的可玩性&#xff0c;比如说跑步、游泳、健身都可以佩戴骨传导耳机&#xff0c;即使长时间佩戴也不会出现不适感&#xff0c;也不会出…

LinearAlgebraMIT_3_InverseMatrix

x.1 矩阵乘法 矩阵乘法的常用运算规则有五种&#xff0c;如下是一种&#xff0c;是最简单的矩阵乘法&#xff0c;用一行乘以一列&#xff0c;假设A是mxn的矩阵&#xff0c;B是nxp的矩阵&#xff0c;则最终得到mxp的矩阵。 在矩阵A和向量a乘法中&#xff0c;我们已经习惯性地将…

Sumifs函数(excel)

SUMIFS 函数是一个数学与三角函数&#xff0c;用于计算其满足多个条件的全部参数的总量。excel如何使用Sumifs函数&#xff1f; 工具/原料 联想ThinkPad X1 windows7 WPS office2021 方法/步骤 首先运行office软件&#xff0c;打开一份表格&#xff0c;今天我们要计算以“…

SDN-OpenDaylight与Mininet的原理、安装、使用

一、前言 本文将介绍OpenDaylight与Mininet的原理并介绍他们的安装及简单的使用&#xff0c;本实验的环境为Liunx Ubuntu 16.04&#xff0c;已成功安装OVS&#xff0c;但没有安装Mininet。 二、原理 &#xff08;一&#xff09;OpenDaylight OpenDaylight是一个软件定义网络&…

【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】

前言 【抖音小游戏】 Unity制作抖音小游戏方案 最新完整详细教程来袭【持续更新】一、相关准备工作1.1 用到的相关网址1.2 注册字节开发者后台账号 二、相关集成工作2.1 下载需要的集成资源2.2 安装StarkSDK和starksdk-unity-tools工具包2.3 搭建测试场景 三、构建发布3.1 发布…

2.5 DNS 应用 -- 1. DNS 概述

2.5 DNS 应用 -- 1. DNS 概述 DNS&#xff1a;Domain Name SystemDNS分布式层次式数据库DNS根域名服务器TLD和权威域名解析服务器本地域名解析服务器 DNS 查询迭代查询递归查询 DNS记录缓存和更新 DNS&#xff1a;Domain Name System Internet上主机/路由器的识别问题 IP地址域…

基于matlab处理 RGB-D图像数据以构建室内环境地图并估计相机的轨迹(附源码)

一、前言 视觉同步定位和映射 &#xff08;vSLAM&#xff09; 是指计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。 您可以使用单眼摄像头执行 vSLAM。但是&#xff0c;深度无法准确计算&#xff0c;估计的轨迹未知&#xff0c;并且随着时间的推移而漂…

红帽恪守对开源的承诺:对 git.centos.org 变更的回应

导读红帽上周宣布了限制源代码访问性的政策&#xff0c;称其企业发行版 RHEL (Red Hat Enterprise Linux) 相关源码仅通过 CentOS Stream 公开&#xff0c;付费客户和合作伙伴可通过 Red Hat Customer Portal 访问到源代码。 此举引发了巨大争议&#xff0c;红帽甚至被指责 “背…