OpenCV——常用函数

2023-11-13

一、绘制圆形

使用OpenCV库中的`circle()`函数在图像上绘制圆形的代码。

        cv::circle(overlay, pt, 2, cv::Scalar(0,green,red),-1);  

具体来说,它的参数如下:

- `overlay`:图像,在该图像上绘制圆形;
- `pt`:圆心位置的`cv::Point`对象;
- `5`:圆形半径;
- `cv::Scalar(0,green,red)`:圆形的颜色,这里使用的是RGB颜色空间中的颜色值`[0,green,red]`。在这里,`green`和`red`变量的值分别控制了绿色和红色的比例,因此可以通过更改这些变量的值来获得不同颜色的圆形;
- `-1`:表示绘制一个实心圆形。

因此,这行代码的作用就是在名为`overlay`的图像上绘制一个圆心为`pt`,半径为5,颜色为指定颜色值的实心圆形。

二、图像混合

使用OpenCV库中的`addWeighted()`函数将两张图像进行混合的代码。

    cv::addWeighted(overlay,opacity,visImg,1-opacity,0,visImg);

具体而言,它的参数如下:

-  `overlay`:第一张图像,也称为背景图像;
-  `opacity`:`overlay`图像在混合中的不透明度,控制其在混合中的权重,取值范围为[0,1](0表示完全透明,1表示完全不透明);
-  `visImg`:第二张图像,也称为前景图像;
-  `1-opacity`:`visImg`图像在混合中的不透明度,即与`overlay`图像的透明度相反;
-  `0`:新图像的值被计算为两幅图像相加之和,再加上这个参数,即新图像的值为`alpha*overlay  +  beta*visImg  +  gamma`,其中gamma为用户自定义的值(这里为0);
-  `visImg`:混合后得到的新图像。

因此,这行代码的作用就是将具有不同透明度的两个图像混合到一起,即在`visImg`图像上叠加一张透明度为`opacity`的`overlay`图像。混合后的图像将被存储在`visImg`中,`overlay`图像不会被修改。

三、计算图像矩和中心矩

moments函数是OpenCV库中用于计算图像矩和中心矩的函数,其函数原型如下:

Moments moments(InputArray array, bool binaryImage=false);

其中,参数array是输入图像,可以是任意维度和通道数的矩阵(例如灰度图像、彩色图像、二值图像等)。参数binaryImage表示输入图像是否为二值图像,默认值为false,如果为true则只计算输入图像中值为255的像素。

该函数返回一个Moments对象,包含了所有的图像矩和中心矩。可以使用Moments对象的成员变量来获取各个阶数的矩值,例如:

  • double m00 = moments.m00; // 0阶图像矩,即图像面积
  • double m10 = moments.m10; // 1阶水平图像矩
  • double m01 = moments.m01; // 1阶垂直图像矩
  • double m20 = moments.m20; // 2阶水平图像矩
  • double m11 = moments.m11; // 2阶中心图像矩
  • double m02 = moments.m02; // 2阶垂直图像矩
  • ...

其中,mij表示i+j阶的图像矩,例如m10表示一阶水平图像矩,m01表示一阶垂直图像矩,m11表示二阶中心图像矩等。通过这些图像矩可以计算出图像的中心点坐标、面积、方向、轮廓等特征,是图像处理和计算机视觉中常用的工具之一。

四、最小外接矩形

`boundingRect`  是  OpenCV  中的一个函数,用于计算轮廓的最小外接矩形。具体用法如下:

Rect boundingRect(InputArray points);

其中  `points`  是输入的轮廓点集,类型为  `InputArray`,可以是一个  `vector`  或一个  `Mat`。函数返回值是包围输入轮廓的矩形区域,类型为  `Rect`。
例如,我们有一个轮廓点集  `contours`,可以用如下代码计算其外接矩形:

// 计算轮廓外接矩形
Rect rect = boundingRect(contours);

在  `boundingRect`  函数的返回值中,`x`  和  `y`  表示最小外接矩形的左上角坐标,`width`  和  `height`  表示矩形的宽度和高度。这样,我们就可以利用返回的  `Rect`  对象来描述轮廓的外接矩形,例如画出矩形:

// 在图像上绘制矩形
rectangle(img, rect, Scalar(0, 255, 0), 2);

其中,`img`  是要绘制矩形的图像,`Scalar(0,  255,  0)`  表示矩形的颜色,`2`  表示矩形边框的线宽。这样,产生的输出图像就会显示轮廓的最小外接矩形。

五、给图片加信息

cv::putText(image, "图片信息", cv::Point(rect.x, rect.y - 5), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 255), 2, cv::LINE_AA);

使用`putText()`  函数在矩形框上方绘制数字名称。第一个参数是绘制名称的图像,第二个参数是名称字符串,第三个参数是名称的位置,第四个参数是字体类型,第五个参数是字体比例因子,第六个参数是字体颜色,第七个参数是文本粗细,最后一个参数是线型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV——常用函数 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • iOS开发之动画篇-基础篇1

    基础篇 一 制作动画的原理 十二个基本的动画原理 网页动画的十二原则 参考全部开源的HTML和CSS代码实现 二 寻找灵感 1 知名设计师共享平台 Dribbble相当于程序员的gitHub 2 pttrns 手机设计较多 三 制作动画的基
  • 2019零基础如何学好Python?学习Python的策略是什么?

    跟几个IT界的大佬提起python 他们说零基础学好python很简单 python进阶需要花费写气力 都说Python简单易学 那么零基础如何学好Python 有哪些必须学的知识 学习的策略技巧有哪些 今天这篇文章将会给你启发 Pytho
  • PHP学习笔记-MVC框架

    MVC学习笔记 1 什么使MVC框架 MVC是一种软件开发框架 MVC将程序分为三个部分 模型层 M 视图层 V 和控制层 C 对不同的层进行分层管理和控制 方便程序的修改和扩展 2 为什么使用MVC框架 在PHP中使用MVC框架 可以实现
  • GM-MCMC高斯混合马尔科夫-蒙特卡洛算法(Matlab实现)

    GM MCMC高斯混合马尔科夫 蒙特卡洛算法 Matlab实现 地震反演是一种重要的地球物理学方法 通过对震源机制 地球物质介质和地下结构等方面的研究 可以揭示地球内部构造和动力学过程 而线性地震反演则是其中比较基础的一种反演方法 它将地下
  • 错误处理-OSError: Failed to open file b‘C:\\Users\\\xe6\x96\x87...\\ AppData\\Local\\Temp\\scipy-xxxxx

    有人说是中文文件路径的问题 我改了 重启了 没用 而且之前一直好好的 安装scipy 1 6 2 然后 from sklearn model selection import train test split 这样导入就好了 莫名奇妙的错误
  • 【无标题】MySQL左连接出现空数据

    今天检查供应商档案错误的时候 遇到一个与左连接右连接相关的问题 已知 用左连接时 放于前面的表 只要其数据符合where及之后的条件 则该数据会全部查出 而放于后面的表如果有符合左连接条件的数据 则显示其数据 如果没有 则对应行显示空 例如
  • Qt5中 Lambda 表达式的使用

    在Qt中信号的槽函数可以使用Lamba表达式来代替 作为槽函数的替代函数 Lambda是C 11添加的内容 在Qt5中使用需要在项目文件中添加CONFIG c 11 Lambda的基本类型为 与普通函数void change 相比 只有括号
  • 云智慧刘洪涛:中国AIOps正走向深水区

    做企业要有危机意识 特别是TO B企业 要能从当下找到问题 找到自己的短板 作者 斗斗 编辑 皮爷 出品 产业家 干练精神 思路清晰 这是刘洪涛给我们的第一感觉 创业是孤独的 他告诉产业家 如今 云智慧正迎来特殊的时刻 7月份 云智慧刚刚宣
  • c语言程序代码分享,一些简单的C语言程序代码(最新整理)

    一些简单的C语言程序代码 最新整理 由会员分享 可在线阅读 更多相关 一些简单的C语言程序代码 最新整理 17页珍藏版 请在人人文库网上搜索 1 由键盘任意输入 1 个 4 位数整数 分别输出其中的个位 十位 百位 千位 expe 3 10
  • 01_配置yum源-银河麒麟V10(Kylin Linux Advanced Server V10 (Tercel))操作系统

    本文章收录于 国产银河服务器安装文档集 将详细的讲解 国产银河服务器操作系统各种软件的部署与说明 目录 配置yum源的两种方式 一 配置外网 yum 源 1 查看yum源 2 备份yum源 3 配置外网yum源 4 查看yum源 5 使yu
  • ValueError: x and y must have same first dimension, but have shapes (2,) and (1,)

    我的模型的epoch是从1开始训练的 画图的时候出现 ValueError x and y must have same first dimension but have shapes 2 and 1 ax1 plot np arange
  • NO.49-------Unity播放背景音乐不受场景切换影响

    原理就是在场景中放置一个预制体 设置标签为sound 挂载audio source组件 同时挂载一个场景切换时自身不会销毁的脚本 using System Collections using System Collections Gener
  • 深度学习垃圾分类数据集

    随着科技的发展 人工智能逐渐走进我们的生活 在这个过程中 数据集的重要性不言而喻 为了推动环保事业的发展 我们需要更多高质量的垃圾分类数据集 今天 我们将探讨一个包含2500 样本的垃圾分类数据集 它涵盖了6大类别 纸板 玻璃 金属 纸张
  • 从零开始的ESP8266探索(04)-连接/建立网络

    文章目录 目的 连接到网络 建立新网络 更多方式 总结 目的 使用ESP8266主要就是为了用它的网络功能 使用网络功能首先的就是需要连接到一个现有的网络 STA模式 或是建立一个网络 soft AP模式 连接到网络 在Arduino fo
  • GitHub YOLOv5 开源代码项目运行

    本专栏将从安装到实例运用全方位系列讲解 GitHub YOLOv5 开源代码 专栏地址 GitHub YOLOv5 开源代码项目系列讲解 目 录 1 源码下载及环境配置 2 利用 Yolov5 进行预测 2 1 对项目提供图片进行预测 2
  • 在离线渲染器中应用MERL BRDF

    BRDF Bidirectional Reflection Density Function 即出射光线的radiance和入射光线的irradiance的比值 在图形学中被用来描述物体的表面反射属性 BRDF的值一般来说由几个参数决定 入
  • MyBatis的使用

    目录 一 Sring项目中关于MyBatis的配置 1 在pom xml中引入框架依赖 2 配置文件配置相关信息 3 设置mapper中的xml文件内容 4 根据以上配置实现的查询示例 1 添加实体类 2 添加mapper接口 3 添加Us
  • FreeRTOS教程——队列(三)

    Free RTOS队列 队列函数库 1 xQueueCreate queue h xQueueHandle xQueueCreate unsigned portBASE TYPE uxQueueLength unsigned portBAS
  • java中的常用语句

    Java中的常用语句 一 Java中的语句由3大类的结构 1 顺序结构 自上而下一行一行的有序的执行 2 选择结构 1 If语句结构 2 Switch语句结构 3 循环结构 1 For循环 2 While循环 3 Do while 循环 二
  • OpenCV——常用函数

    一 绘制圆形 使用OpenCV库中的 circle 函数在图像上绘制圆形的代码 cv circle overlay pt 2 cv Scalar 0 green red 1 具体来说 它的参数如下 overlay 图像 在该图像上绘制圆形