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

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算一个文本字符串的宽度和高度。

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

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

函数原型

cpp 复制代码
Size cv::getTextSize
(
	const String & 	text,
	int 	fontFace,
	double 	fontScale,
	int 	thickness,
	int * 	baseLine 
)		

参数

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

代码示例

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

cpp 复制代码
#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;
}

运行结果

相关推荐
董厂长几秒前
规范驱动开发(Spec-Driven Development):一个批判性审视
人工智能·驱动开发
Raink老师1 分钟前
【AI面试临阵磨枪-088】Skill 如何做参数校验、依赖注入、权限控制、超时、重试、幂等?
人工智能·面试·职场和发展
城事漫游Molly3 分钟前
AI与质性研究的融合(三):AI赋能质性数据分析——从编码到理论构建的新范式
大数据·人工智能·机器学习·prompt·ai for science·智能体·定性研究
chenying9981793 分钟前
语音克隆模型的难点之一:音素对齐及交叉注意力早期失效问题 (兼论旋转位置编码)——F5-TTS、SupertonicTTS、VoxFlash-TTS 对比
人工智能·实时音视频·语音合成·tts·语音克隆
凯丨4 分钟前
会“做梦“的 AI:用一句话生成可以玩的世界——读懂世界模型 Genie 3
人工智能·microsoft
踏着七彩祥云的小丑5 分钟前
AI学习——记忆系统
人工智能·学习·ai
ACP广源盛1392462567310 分钟前
GSV2221@ACP# 高带宽低功耗显示转换芯片,赋能 TRAE SOLO 设备高清扩展升级
人工智能·嵌入式硬件·电脑·音视频
大强同学11 分钟前
我用 Claude Code,把 NotebookLM 变成了 Obsidian 插件
人工智能·agent·claude·skill·notebooklm
J2虾虾18 分钟前
Spring AI Alibaba - Memory 短期记忆
人工智能·spring·microsoft
刘一说25 分钟前
AI科技热点日报 | 2026年5月30日
人工智能·科技