OpenCVForUnity(八)文本与随机数

文章目录

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

前言

本教程将介绍如何使用随机数生成器类RNG以及从均匀分布中获取随机数的方法。

您将学习如何在OpenCV窗口中使用PutText函数来显示文本。

在之前的教程中,我们为绘制几何图形提供了特定的参数值,如坐标(以Point的形式)、颜色和线宽等。但是,在本教程中,我们将使用随机值来设置参数,同时使用循环和大量的几何图形进行绘制。这将使整个过程自动化,并使图像具有不同的特点和样式。


putText (绘制文本)

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

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

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

结构:

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

例子:

csharp 复制代码
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容器, 期望均值, 标准差);

例子:

csharp 复制代码
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容器,下边界,上边界);

例子:

csharp 复制代码
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容器)
例子:

csharp 复制代码
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;

效果如下:


结语

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

相关推荐
≮傷£≯√16 小时前
OpenCV 边缘检测 Canny
人工智能·opencv·计算机视觉
≮傷£≯√20 小时前
opencv 图像处理(一)
图像处理·人工智能·opencv
sali-tec21 小时前
C# 基于OpenCv的视觉工作流-章114-视觉与http通讯
图像处理·人工智能·opencv·计算机视觉·c#
ahccqw1 天前
Opencv 基础常用API
人工智能·opencv·计算机视觉
2601_967987371 天前
用Python+OpenCV+YOLO写个游戏脚本:从自动瞄准到自动采集的保姆级教程
python·opencv·yolo·目标检测·游戏自动化
zhippt_10142 天前
图转PPT实测:截图、课件照片如何还原成可编辑幻灯片
opencv·powerpoint
W_326002 天前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉
代码山河3 天前
图像基础:HSV颜色空间详解及颜色提取实战
opencv·目标检测·计算机视觉·教程
再__努力1点3 天前
RK3576/RV1126B多路视频 AI 开源引擎 CosmoEdge:从模型到交付,轻松搞定!
人工智能·opencv·计算机视觉·架构·课程设计
代码山河4 天前
入门实战:用OpenCV实现图像的亮度与对比度调整
opencv·目标检测·计算机视觉·教程