OpenCV杂记(1):绘制OSD(cv::getTextSize, cv::putText)

news2024/11/28 18:49:06

1. 简述

        我们使用OpenCV时,有时会在图像的某个位置绘制OSD信息,如绘制一些字符串作为指示信息。

本文将简要介绍在图像(cv::Mat)上绘制固定的字符串信息。

2. 使用的API

(1)cv::getTextSize()

CV_EXPORTS_W Size getTextSize(const String& text,

                                                          int fontFace,

                                                          double fontScale,

                                                          int thickness,

                                                          CV_OUT int* baseLine);

        一般情况下,我们可以直接指定绘制文本的原点信息(默认为左下角坐标),但为了防止出现字符串溢出的问题,还是建议首先通过该API获得在图像上的大小信息。

参数解释:

text:要绘制的文本字符串

fontFace:字体的类型参照HersheyFonts

fontScale:字体放大倍数

thicknes:用于绘制文本的线条的粗细

baseLine:相对于最底部文本的基线y坐标指向

baseLine是文本最低点对应的Y坐标,如下,蓝色线条的Y坐标即是baseLine。

(baseLine指示信息)

(2)cv::putText

CV_EXPORTS_W void putText( InputOutputArray img,

                                                    const String& text, Point org,

                                                    int fontFace,

                                                    double fontScale,

                                                    Scalar color,

                                                    int thickness = 1,

                                                    int lineType = LINE_8,

                                                    bool bottomLeftOrigin = false );

参数解释:

img: 图像;

text: 要绘制的文本字符串;

org: 所绘制文本字符串的原点(默认是左下角,由bottomLeftOrigin控制);

fontFace: 字体的类型参照HersheyFonts;

fontScale: 乘以特定于字体的基本大小的字体比例因子(放大倍数);

color: 字体的颜色;

thickness: 用于绘制文本的线条的粗细;

lineType: 线条的类型参照LineTypes;

bottomLeftOrigin: 如果为true,则图像数据原点位于左下角。否则,它在左上角;

fontFace的取值如下:

FONT_HERSHEY_SIMPLEX = 0    普通大小无衬线字体

FONT_HERSHEY_PLAIN = 1  小号无衬线字体

FONT_HERSHEY_DUPLEX = 2 普通大小无衬线字体

FONT_HERSHEY_COMPLEX = 3    普通大小无衬线字体比 FONT_HERSHEY_DUPLEX 更复杂

FONT_HERSHEY_TRIPLEX = 4    普通大小无衬字体,比 FONT_HERSHEY_COMPLEX 更复杂

FONT_HERSHEY_COMPLEX_SMALL = 5  小号版本的 FONT_HERSHEY_COMPLEX

FONT_HERSHEY_SCRIPT_SIMPLEX = 6 手写字体

FONT_HERSHEY_SCRIPT_COMPLEX = 7 比 FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂的变体

FONT_ITALIC =16 斜体(上面的字体都可以和斜体一起使用)

3. 参考例程

#include <opencv2/opencv.hpp>  

#include <iostream>  

 

int main(int argc, char* argv[])

{

    /** 读取图像. */

    cv::Mat image = cv::imread("demo.jpg"); ///< 替换为你的图片路径  

    if (image.empty()) {  

        std::cerr << "Loading image failed!" << std::endl;  

        return -1;  

    }  

 

    /** 设置OSD文本. */

    std::string osdText = "OSD Info";

    cv::Point org(50, 50); ///< 文本开始的坐标  

    int fontFace = cv::FONT_HERSHEY_SIMPLEX;  

    double fontScale = 1.0;  

    int thickness = 2;  

 

    /** 获取文本尺寸. */

    int baseLine;  

    cv::Size textSize = cv::getTextSize(osdText, fontFace, fontScale, thickness, &baseLine);  

 

    /** 确保文本在图像范围内. */

    if (org.x + textSize.width > image.cols) {  

        org.x = image.cols - textSize.width - 10; ///< 留出10个像素的边距  

    }  

    if (org.y - baseLine < 0) {  

        org.y = baseLine + 10; ///< 留出10个像素的边距  

    }  

 

    /** 设置文本颜色. */

    cv::Scalar color(0, 0, 255); ///< 红色  

 

    /** 绘制OSD文本. */

    cv::putText(image, osdText, org, fontFace, fontScale, color, thickness, cv::LINE_AA);  

 

    /** 显示和保存图像. */

    cv::imwrite("demo_osd.jpg", image); ///< 保存图像  

    sleep(1);

 

    return 0;  

}

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

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

相关文章

Qt 6子窗口全屏显示

一、全屏显示效果 二、全屏相关函数 1,全屏显示函数 QWidget::showFullScreen(); // 此方法只对顶级窗口有效&#xff0c;对子窗口无效 2&#xff0c;恢复显示函数 QWidget::showNormal(); // 此方法也只对顶级窗口有效&#xff0c;对子窗口无效 3&#xff0c;最小化显示函…

陇剑杯 省赛 攻击者1 CTF wireshark 流量分析

陇剑杯 省赛 攻击者1 题目 链接&#xff1a;https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码&#xff1a;haek ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ acce…

【数学】主成分分析(PCA)的应用案例解析(Python)

接着上文PCA的数学详细推导过程&#xff0c;本文介绍使用Python结合图像压缩案例解释PCA的具体实现流程&#xff0c;以了解数据处理的一些方法 Jupyter Notebook file 文章目录 借助 scikit-learn 实现 PCA输入数据PCA降维并重建 手动实现 PCA 过程输入数据数据居中处理协方差矩…

PPTist在线编辑、播放幻灯片

PPTist简介 “一个基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;支持 文字、图片、形状、线条、图表、表格、视频、音频、公式 几种最常用的元素类型&#xff0c;每一种元素都拥…

多模态大语言模型综述

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

arcgis中坡向计算工作原理说明

用于识别出从每个像元到其相邻像元方向上值的变化率最大的下坡方向。坡向可以被视为坡度方向。输出栅格中各像元的值可指示出各像元位置处表面的朝向的罗盘方向。将按照顺时针方向进行测量&#xff0c;角度范围介于 0&#xff08;正北&#xff09;到 360&#xff08;仍是正北&a…

Stable Diffusion 模型分享:CyberRealistic XL(真实)cyberrealisticXL_v11VAE.safetensors

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 这是 CyberRealistic 的 SDXL 版本。 该模型的标准…

朗思-我的家园正式上线:朗思科技Agent工具软件--人人拥有“Ai-机器人”

4月16日&#xff0c;朗思科技正式发布"朗思-我的家园"。朗思科技是国内领先的Ai Agent智能自动化工具软件产品及方案的提供商&#xff0c;始终坚持自主研发&#xff0c;全面支持国产信创&#xff0c;不断加快产品创新迭代。基于技术领先性和战略前瞻性&#xff0c;其…

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一&#xff0c;各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲&#xff0c;每次DDoS攻击的平均成本为20万美元。可见&#xff0c;我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外&#xff0c;更重要…

Ubuntu 20.04 LTS 在3588安卓主板上测试yolov8-1.0版本的yolov8n-seg模型

0. 创建虚拟环境 #!< 创建虚拟环境yolov8 $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper $ mkvirtualenv yolov8 -p /usr/bin/python3.81. 将yolov8n-seg.pt转换为yolov8n-seg.onnx文件 #!< 创建项目目录yolov8-rknn并下载yolov8n-seg.pt模型文…

【网络安全 | 密码学】JWT基础知识及攻击方式详析

前言 JWT&#xff08;Json Web Token&#xff09;是一种用于在网络应用之间安全地传输信息的开放标准。它通过将用户信息以JSON格式加密并封装在一个token中&#xff0c;然后将该token发送给服务端进行验证&#xff0c;从而实现身份验证和授权。 流程 JWT的加密和解密过程如…

【C++类和对象】拷贝构造与赋值运算符重载

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

通过excel获取网站的数据信息

通过excel获取网站的数据信息&#xff0c;有时候网站数据的表格很多数据&#xff0c;需要梳理到表格中&#xff0c;如何用excel表格直接读取网站数据 备注问题&#xff1a;表格内容有时候在一行&#xff0c;很长&#xff0c;不方便处理 bug问题&#xff1a;不要多选&#xff0…

鸢尾花数据集分类(决策树,朴素贝叶斯,人工神经网络)

目录 一、决策树 二、朴素贝叶斯 三、人工神经网络 四、利用三种方法进行鸢尾花数据集分类 一、决策树 决策树是一种常用的机器学习算法&#xff0c;用于分类和回归任务。它是一种树形结构&#xff0c;其中每个内部节点表示一个特征或属性&#xff0c;每个分支代表这个特征…

元宇宙-虚拟世界的安全风险如何应对

元宇宙&#xff08;Metaverse&#xff09;是一个虚拟时空间的集合&#xff0c;由一系列的增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;和互联网&#xff08;Internet&#xff09;所组成。这个虚拟时空间是一个持续存在的、由众多虚拟世界互相连接而…

深度Q-Learning在算法交易中的应用

一、说明 在《华尔街的随机漫步》一书中&#xff0c;作者伯顿马尔基尔&#xff08;Burton G. Malkiel&#xff09;声称&#xff1a;“一只蒙着眼睛的猴子向报纸的财经版面投掷飞镖&#xff0c;可以选择一个与专家精心挑选的投资组合一样好的投资组合。 如果我们让巴甫洛夫的狗接…

Vue3从入门到实战:深度掌握组件通信(上部曲)

props的概念&#xff1a; 当你使用Vue 3的组合式API时&#xff0c;props就是一种让你可以从父组件向子组件传递数据的方式。你可以想象成你在给子组件写一封信&#xff0c;把需要传递的信息放在信封里。 在Vue 3中&#xff0c;你可以在子组件的代码中定义props&#xff0c;就…

javaWeb项目-校园交友网站功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java语言 Java语…

HTML部分常用标签补充

table&#xff08;布局方面不建议使用&#xff0c;而是使用CSS来完成&#xff09;: 标签解释&#xff1a; ~table标签顾名思义&#xff0c;是表格的意思 ~table其中可以使用boder属性来显示表格的线&#xff0c;最好使用CSS来配合HTML的使用 ~table内的内容可以使用colspan来定…

2024运营级租房源码管理PHP后台+uniapp前端(app+小程序+H5)

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 房产系统 一款基于ThinkPHPUniapp开发的房产管理系统&#xff0c;支持小程序、H5、APP&#xff1b;包含房客、房东、经纪人三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、房源代理、…