OpenCV绘图函数(11)计算文本字符串在特定字体、尺寸和厚度下的大小的函数getTextSize()的使用

devtools/2024/10/20 5:41:41/
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算一个文本字符串的宽度和高度。
函数 cv::getTextSize 计算并返回包含指定文本的矩形框的尺寸。也就是说,下面的代码渲染一些文本、包围它的紧密矩形框以及基线:

String text = "Funny text inside the box";
int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;
double fontScale = 2;
int thickness = 3;
Mat img(600, 800, CV_8UC3, Scalar::all(0));
int baseline=0;
Size textSize = getTextSize(text, fontFace,fontScale, thickness, &baseline);
baseline += thickness;
// center the text
Point textOrg((img.cols - textSize.width)/2,(img.rows + textSize.height)/2);
// draw the box
rectangle(img, textOrg + Point(0, baseline),textOrg + Point(textSize.width, -textSize.height),Scalar(0,0,255));
// ... and the baseline first
line(img, textOrg + Point(0, thickness),textOrg + Point(textSize.width, thickness),Scalar(0, 0, 255));
// then put the text itself
putText(img, text, textOrg, fontFace, fontScale,Scalar::all(255), thickness, 8);

函数原型


Size cv::getTextSize
(const String & 	text,int 	fontFace,double 	fontScale,int 	thickness,int * 	baseLine 
)		

参数

  • 参数text 输入的文本字符串。
  • 参数fontFace 要使用的字体,参见 HersheyFonts。
  • 参数fontScale 字体缩放因子,乘以特定字体的基本尺寸。
  • 参数thickness 用于渲染文本的线条厚度。详情请参阅 putText。
  • 参数[out] baseLine 相对于文本最底部点的基线 y 坐标。

代码示例

该示例展示了如何计算文本字符串的宽度和高度,并在图像上绘制文本及其周围的紧致矩形框和基线。

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 定义文本和字体参数std::string text = "Sample Text";int fontFace     = cv::FONT_HERSHEY_SIMPLEX;double fontScale = 1.0;int thickness    = 2;// 获取文本尺寸cv::Size text_size;int baseline = 0;text_size    = cv::getTextSize( text, fontFace, fontScale, thickness, &baseline );// 输出文本尺寸std::cout << "Text Size: " << text_size.width << " x " << text_size.height << std::endl;// 创建一个白色背景的图像cv::Mat image( 100, 400, CV_8UC3, cv::Scalar( 255, 255, 255 ) );// 定义文本起始位置cv::Point textOrg( 10, 50 + baseline );  // 文本起始位置// 在图像上绘制文本cv::putText( image, text, textOrg, fontFace, fontScale, cv::Scalar( 0, 0, 0 ), thickness );// 调整矩形框的坐标以确保它从文本的顶部开始,到底部结束cv::Point rectTopLeft( textOrg.x, textOrg.y - text_size.height );cv::Point rectBottomRight( textOrg.x + text_size.width, textOrg.y + baseline );// 绘制紧致矩形框cv::rectangle( image, rectTopLeft, rectBottomRight, cv::Scalar( 0, 255, 0 ), 1 );// 绘制基线cv::line( image, textOrg, cv::Point( textOrg.x + text_size.width, textOrg.y ), cv::Scalar( 0, 0, 255 ) );// 显示图像cv::imshow( "Text Sample", image );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/devtools/107324.html

相关文章

心觉:如何填平想象和愿望之间的鸿沟?

愿望是什么&#xff1f; 你想变得富有 你想减掉20斤 你想拥有自己的Dream Car 你想拥有S型身材 这些都是愿望&#xff0c;非常美好的想法或者目标 想象是什么&#xff1f; 我能变得富有吗&#xff0c;我啥也不会&#xff0c;除了上班&#xff0c;就是上班 我怎么可能减肥…

【知识点】图论续篇 - 最短路算法合集

我不会跟大家说我两个月前就写好了&#xff0c;只是今天才发出来。 本文概述 最短路算法&#xff0c;见名知意&#xff0c;就是用于求出图中从某个顶点到另一个顶点最短距离的算法。最短路算法的应用极其广泛。本文将会以求解最短路为中心&#xff0c;围绕着展开叙述一些常见的…

如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发

背景 有学员粉丝朋友在群里面问到一个如何针对普通的window进行dumpsys相关的viewtree问题&#xff0c;即展示每个window的view的层级树。比如我们知道activity的话可以使用如下命令进行dump adb shell dumpsys activity com.android.launcher3/com.android.launcher3.uiover…

802.11 中 scrambler的matlab仿真

802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling&#xff0c;而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码&#xff0c;multiplicativ…

Linux 磁盘管理-磁盘接口类型和分区看这一篇就够了

今天给伙伴们分享一下Linux 磁盘管理-磁盘接口类型和分区&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得…

C语言程序设计-练习篇(变种水仙花)

端一碗水&#xff0c;出门去捉一碗月亮。 变种水仙花 描述&#xff1a; 变种水仙花数-Lily Number&#xff1a;把任意数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461可以拆分成&#xff08;1和461&#xff09;&#xff0c;&#xff08;14和61&#xff09;&#x…

自然语言处理-词向量转换

文章目录 一、简介1.含义2.基本原理3.常见转换方法1&#xff09;. 独热编码&#xff08;One-Hot Encoding&#xff09;2&#xff09;. 词袋模型&#xff08;Bag of Words, BoW&#xff09;3&#xff09;. TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xf…

0、Typescript学习

1、变量声明 let a:number100 2、常量 const b:number200 3、判断变量的类型 //number 表示数值类型&#xff0c;包括整数和浮点数 let a:number100 console.log(typeof a) 4、定义数组 let arr1:number[][1,2,3]console.log(arr1[0]) 5、定义函数 &#xff08;1&…