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

运行结果

相关推荐
wen__xvn5 分钟前
目标检测的局限
人工智能·目标检测·计算机视觉
力学与人工智能15 分钟前
博士答辩PPT分享 | 高雷诺数湍流场数据同化与湍流模型机器学习研究
人工智能·机器学习·ppt分享·高雷诺数·流场数据同化·湍流模型
调参札记27 分钟前
医学研究中的因果推断:重视态度与实践流程的结构性落差
人工智能
木卫四科技30 分钟前
Chonkie 技术深度学习
人工智能·python·rag
努力毕业的小土博^_^35 分钟前
【地学应用】溜砂坡scree slope / talus slope的定义、机制、分布、危害、与滑坡区别、研究方向与代表论文
人工智能·深度学习·遥感·地质灾害·地学应用
JeffDingAI35 分钟前
【Datawhale学习笔记】基于Gensim的词向量实战
人工智能·笔记·学习
Ryan老房36 分钟前
自动驾驶数据标注-L4-L5级别的数据挑战
人工智能·目标检测·目标跟踪·自动驾驶
weixin_398187751 小时前
YOLOv8结合SCI低光照图像增强算法实现夜晚目标检测
人工智能·yolo
万行1 小时前
机器人系统ROS2
人工智能·python·机器学习·机器人·计算机组成原理
人工智能AI技术1 小时前
【Agent从入门到实践】05 小结:理清Agent的核心定义与核心能力
人工智能