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;
}

运行结果

相关推荐
karshey几秒前
【前端】svelte支持scss,包管理器是webpack
前端·webpack·scss
漫天黄叶远飞4 分钟前
🎄2025年圣诞节,单身的我只能用 Gemini 3 “嘴遁”出了一棵赛博圣诞树
前端·人工智能·gemini
腾飞开源4 分钟前
53_Spring AI 干货笔记之转录API
人工智能·语音转文字·spring ai·azure openai·转录api·openai whisper·统一接口
Mintopia9 分钟前
🤖 AI 对话斜街的文件处理秘笈:PDF、图片与 ClaudeCod 的花式对接之道
人工智能·llm·aigc
zl_vslam11 分钟前
SLAM中的非线性优-3D图优化之相对位姿Between Factor-SO3/t形式(十一)
人工智能·算法·计算机视觉·3d
绿蕉12 分钟前
AI安全:构建智能体信任的“数字锚点”
人工智能
DO_Community12 分钟前
DigitalOcean推出AI智能体开发套件(ADK),让你的 AI Agent 从原型走向可用
服务器·人工智能·ai·agent·mcp
鲨莎分不晴13 分钟前
游戏 AI 的巅峰之路:从 OpenAI Five 到 AlphaStar
人工智能·游戏
乾元14 分钟前
AI 驱动的网络攻防演练与安全态势推演——从“规则检测”到“行为级对抗”的工程体系
网络·人工智能·安全·web安全·架构·自动化·运维开发