OpenCVForUnity(八)文本与随机数

news2024/11/25 14:16:57

文章目录

  • 前言
  • putText (绘制文本)
  • randn (正态分布随机数)
  • randu(均匀分布随机数)
  • randShuffle (数组随机重排)
  • 结语


前言

本教程将介绍如何使用随机数生成器类RNG以及从均匀分布中获取随机数的方法。
您将学习如何在OpenCV窗口中使用PutText函数来显示文本。
在之前的教程中,我们为绘制几何图形提供了特定的参数值,如坐标(以Point的形式)、颜色和线宽等。但是,在本教程中,我们将使用随机值来设置参数,同时使用循环和大量的几何图形进行绘制。这将使整个过程自动化,并使图像具有不同的特点和样式。


putText (绘制文本)

这个函数可以在一个图像中绘制指定的文本字符串。当指定的字体无法显示某些字符时,这些字符将被替换为问号。通过调用getTextSize函数,可以得到一个文本渲染示例的代码。

putText接受多个参数,包括要绘制的图像、文本字符串、字符串的左下角坐标、字体类型(使用HersheyFonts),字体比例因子(与字体特定基本大小相乘),文本颜色、线条厚度以及线条类型。

在图像中绘制文本的位置是相对于指定左下角坐标的。

结构:
Imgproc.putText(Mat容器, 文本内容, 起始点, 字体类型, 字体大小, 颜色, 线厚度, 线类型);

例子:

Mat inputMat = new Mat(512, 512, CvType.CV_8UC4);
Imgproc.putText(inputMat, "Test", new Point(256, 256), 1, 5, new Scalar(255, 0, 0), 5, 8);
Texture2D putTextTexture = new Texture2D(inputMat.cols(), inputMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(inputMat, putTextTexture);
GameObject.Find("Cube1").GetComponent<Renderer>().material.mainTexture = putTextTexture;

上面我们绘制了一个文本,效果如下:

在这里插入图片描述


randn (正态分布随机数)

这个函数会生成正态分布随机数,并填充到指定的数组中。用户需要提供目标数组,以及期望的均值向量和标准差矩阵。

生成的随机数会被剪切到输出数组的值范围内。目标数组必须预先分配并具有1到4个通道。
标准差矩阵可以是向量(此时假定为对角矩阵),也可以是方阵。

更多随机数生成函数可以参考RNG和randu。

结构:
Core.randn(Mat容器, 期望均值, 标准差);

例子:

Mat randnMat = new Mat(32, 32, CvType.CV_8UC4);
Core.randn(randnMat, 0, 128);
Texture2D randnTexture = new Texture2D(randnMat.cols(), randnMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(randnMat, randnTexture);
GameObject.Find("Cube2").GetComponent<Renderer>().material.mainTexture = randnTexture;

效果如下:
在这里插入图片描述


randu(均匀分布随机数)

它可以生成单个或多个均匀分布随机数。该函数的非模板版本将目标数组(dst)填充为从指定范围内取出的均匀分布随机数.

用户需要提供目标数组(dst),以及生成随机数的上下边界。生成的随机数是左闭右开区间内的实数。目标数组必须预先分配。

还有模板版本的randu函数可以生成更通用的随机数,更多带有随机性的函数可以参看RNG和randn。

结构:
Core.randu(Mat容器,下边界,上边界);

例子:

Mat randuMat = new Mat(32, 32, CvType.CV_8UC4);
Core.randu(randuMat, 0, 128);
Texture2D randuTexture = new Texture2D(randuMat.cols(), randuMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(randuMat, randuTexture);
GameObject.Find("Cube3").GetComponent<Renderer>().material.mainTexture = randuTexture;

效果如下:

在这里插入图片描述


randShuffle (数组随机重排)

它可以将指定的一维数组随机重排。函数通过随机选择数组中的元素对并进行交换来实现重排。函数将会进行 dst.rowsdst.colsiterFactor 次这样的交换操作。

用户需要提供一个数值型的一维数组作为输入。另外,注意到此版本的 randShuffle 是一个比较古老的API,OpenCV的开发者建议使用更加通用的 shuffle 函数来代替。

更多相关函数可以使用RNG和sort来进行学习和探索。
结构:
Core.randShuffle(Mat容器)
例子:

Mat randShuffleMat = new Mat(32, 32, CvType.CV_8UC4);
Core.randShuffle(randShuffleMat);
Texture2D randShuffleTexture= new Texture2D(randShuffleMat.cols(), randShuffleMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(randShuffleMat, randShuffleTexture);
GameObject.Find("Cube4").GetComponent<Renderer>().material.mainTexture = randShuffleTexture;

效果如下:
在这里插入图片描述


结语

本次的介绍到这里就结束啦,这样绘制图形有多了一个有利的工具啦。随着工具积累的越来越来我们也可以绘制出更多五彩斑斓的图形啦。

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

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

相关文章

LIMA:小规模监督数据指令微调

论文标题&#xff1a;LIMA: Less Is More for Alignment 论文链接&#xff1a;https://arxiv.org/abs/2305.11206 论文来源&#xff1a;Meta AI 一、概述 语言模型在大规模语料上以预测下一个token的方式预训练&#xff0c;使它们能够学习可迁移到几乎任何语言理解或生成任务的…

让小程序动起来-轮播图的两种方式--【浅入深出系列003】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步&#xff0c;就是找到文件。第二步&#xff0c;先改动一下最显眼…

全源最短路Johnson算法

最短路Johnson算法( O ( n m l o g m ) O(nmlogm) O(nmlogm)) 可以求任意两点最短路&#xff0c; 新图的边权改造为&#xff1a; w ( x , y ) h ( x ) − h ( y ) w(x,y)h(x)-h(y) w(x,y)h(x)−h(y) 构造的新图 d 1 ( x , y ) d ( x , y ) h ( x ) − h ( y ) d1(x,y)d(x,y…

java学习02

一、基本数据类型 Java有两大数据类型&#xff0c;内置数据类型和引用数据类型。 内置数据类型 Java语言提供了八种基本类型。六种数字类型&#xff08;四个整数型&#xff0c;两个浮点型&#xff09;&#xff0c;一种字符类型&#xff0c;还有一种布尔型。 byte&#xff1…

leetcode:704. 二分查找(python3解法)

难度&#xff1a;简单 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9…

人工智能发展前夜,基于控制论的杂谈

谢邀。 目录 《What the Frogs Eye Tells the Frogs Brain?》简介我是怎么理解这篇文章的&#xff1f;被后世频繁引用的「青蛙」从「青蛙」再重新转向控制论 《What the Frog’s Eye Tells the Frog’s Brain?》简介 帕斯克在实践和理论中&#xff0c;将人类的适应性行为引入…

集成算法的参数空间与网格优化

目录 1. 探索参数空间 1.1 学习曲线 1.2. 决策树对象Tree 2. 使用网格搜索在随机森林上进行调参 1. 探索参数空间 随机森林集成算法的超参数种类繁多、取值丰富&#xff0c;且参数之间会相互影响、共同作用于算法的最终结果&#xff0c;因此集成算法的调参是一个难度很高的过…

JavaSwing+MySQL的聊天系统设计

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88055544 JDK1.8、MySQL5.7 功能&#xff1a;类似于QQ软件的聊天系统&#xff0c;可以进行登录注册聊天发信息等功能

为什么说Raft原生系统是流式数据的未来?

目录 一、前言 二、Redpanda是如何实施Raft的&#xff1f; Redpanda的需求是&#xff1a; 实施Raft为这三个需求提供了坚实的基础&#xff1a; 1. 简单性 2. 性能 3. 可靠性 三、但是Kraft又如何呢&#xff1f; 四、结合Raft与性能工程 一、前言 共识是一致性分布式…

分布式声波传感(DAS)声音还原

声音还原 DAS 基于相位敏感光时域反射计(Φ-OTDR)的分布式光纤声波传感技术(DAS)是一种利用光纤后向瑞利散射干涉效应实现声波信号连续分布式探测的传感技术。 实验装置如下图所示&#xff0c;采用窄线宽光纤激光器作为光源&#xff0c;出射光通过90:10的光纤耦合器分成参考光和…

AlphaPose复现配置教程

AlphaPose复现配置教程 AlphaPose介绍 AlphaPose是一种准确的多人姿态估计器&#xff0c;这是第一个在COCO数据集上达到70 mAP (75 mAP)和在MPII数据集上达到80 mAP (82.1 mAP)的开源系统。为了匹配跨帧的同一人的姿态&#xff0c;我们还提供了一种高效的在线姿态跟踪器&…

Effective C++学习笔记(6)

目录 条款32. 确定你的public继承塑模出is-a关系条款33.避免遮掩继承而来的名称条款34.区分接口继承和实现继承条款35.考虑virtual函数以外的其他选择条款36.绝不重新定义继承而来的non-virtual函数条款37.绝不重新定义继承而来的缺省参数值条款38.通过复合塑模出has-a或“根据…

HP惠普暗影精灵9笔记本原装出厂Win11系统预装专用OEM系统镜像

暗影9笔记本电脑原厂Windows11系统包 OMEN by HP 16.1英寸游戏本16-wf0000,16-wf0001,16-wf0003,16-wf0004,16-wf0006,16-wf0008,16-wf0009,16-wf0010,16-wf0011,16-wf0012,16-wf0028,16-wf0029,16-wf0007,16-wf0032,16-wf0036,16-wf0043 链接&#xff1a;https://pan.baidu.…

78、分布式事务解决方案

分布式事务解决方案 XA规范: 分布式事务规范&#xff0c;定义了分布式事务模型 四个角色: 事务管理器(协调者TM)、资源管理器(参与者RM)&#xff0c;应用程序AP&#xff0c;通信资源管理器CRM 全局事务:一个横跨多个数据库的事务&#xff0c;要么全部提交、要么全部回滚 JT…

远程大文件传输工具该怎么选择?

随着网络技术的不断进步&#xff0c;越来越多的人需要在不同地点之间传输文件。这时候&#xff0c;我们便需要使用远程文件传输工具。 1、什么是远程文件传输工具呢&#xff1f; 简单来说&#xff0c;它是一种能够帮助我们在不同设备之间传输文件的工具。通常情况下&#xff0…

Makefile:6: *** missing separator. Stop.

Makefile:2: *** missing separator. Stop. Windows下用VS CODE编写makefile文件&#xff0c;编译报出这个错误 可以查看一下VS CODE左下角&#xff0c;如果是下图“空格&#xff1a;4”这样&#xff0c;需要更改一下。 在“空格&#xff1a;4”上左键单击一下&#xff0c;在…

C# webform alert弹出内容换行

用 ” \n “(双斜杠哈&#xff0c;发布出去以后csdn只显示一个斜杠)换行&#xff0c;亲测有效果&#xff0c;其中saveNum,lose,sbnr 都是参数&#xff0c;sbnr是输入的换行内容&#xff0c;代码如下&#xff1a; ClientScript.RegisterStartupScript(this.GetType(), "ale…

小研究 - 面向 Java 的高对抗内存型 Webshell 检测技术(五)

由于 Web 应用程序的复杂性和重要性, 导致其成为网络攻击的主要目标之一。攻击者在入侵一个网站后, 通常会植入一个 Webshell, 来持久化控制网站。但随着攻防双方的博弈, 各种检测技术、终端安全产品被广泛应用, 使得传统的以文件形式驻留的 Webshell 越来越容易被检测到, 内存…

【天梯赛集训】7.18习题集

目录 7-1 递归 递推 7-2 函数的递归调用 7-3 A010 递归练习1 7-4 A011 递归练习2 7-5 A012 递归练习3 7-6 PG009 循环与递归 7-7 计算Fibonacci数列—递归 7-8 整数转换为字符串 7-9 简单的归并 AC&#xff1a; 9 / 9 用时&#xff1a;1 h 4 min 递归专题。 7-1 递归 递推 #inc…

Go语言的发展历史

Go语言的Logo 作为程序员&#xff0c;我们每天会用到大量的编程语言&#xff0c;打开界面会碰到很多logo&#xff0c;在正式学习Go语言之前&#xff0c;我们先来了解一下Go语言的Logo。也就是它,下面这个动物&#xff0c;gopher [ˈɡoʊfər] &#xff0c;囊地鼠&#xff0c;…