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——常用函数 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 我在使用 ado.net 时收到错误 Argument 2 may not be pass with ref keywords

    int t 0 cmd Parameters AddWithValue Res ref t 我在第二行收到错误 参数 2 不能与 ref 关键字一起传递 您只能通过引用传递参数ref if the 范围 is a ref参数也是如此 Add
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 使用数据绑定,如何将包含表情符号的文本绑定到标签并使其正确显示?

    我正在编写一个应用程序来连接 WordPress BuddyPress API 该应用程序将允许用户通过 API 相互发送消息 当这些消息包含表情符号时 我很难正确显示它们 以下是 API 返回的消息文本的简短示例 Hi x1f642 ho
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • valgrind 在 Raspberry Pi 上返回未处理的指令

    我最近一直在尝试在运行 Debian GNU Linux7 0 喘息 的树莓派 型号 b 上使用 valgrind 来调试分段错误 每次我在编译的 C 程序上运行 valgrind 时 都会得到类似以下内容的信息 disInstr arm
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 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 图像 在该图像上绘制圆形