OpenCV(cv::putText())



OpenCV 的 cv::putText() 函数用于在图像上绘制文本。它具有多种参数,使您可以控制文本的内容、位置、字体、大小、颜色等。该函数在图像处理和计算机视觉中广泛用于标注图像,添加信息或用于用户界面。



1. 函数定义

void cv::putText(
    InputOutputArray img,
    const String& text,
    Point org,
    int fontFace,
    double fontScale,
    Scalar color,
    int thickness = 1,
    int lineType = LINE_8,
    bool bottomLeftOrigin = false
);

参数解析:

  1. img (InputOutputArray):目标图像(通常是彩色图像,也可以是灰度图像)。文本会在此图像上绘制,必须是可修改的(如 cv::Mat)。

  2. text (const String&):要绘制的文本内容,类型为字符串,可以是字母、数字等字符。

  3. org (Point):文本的起始点。Point(x, y) 表示文本的左下角(默认情况下),其中 xy 是坐标值,(0, 0) 为图像的左上角。

  4. fontFace (int):字体类型,OpenCV 提供了多种字体:

    • FONT_HERSHEY_SIMPLEX:常规大小的无衬线字体
    • FONT_HERSHEY_PLAIN:小字体,无衬线
    • FONT_HERSHEY_DUPLEX:更粗的无衬线字体
    • FONT_HERSHEY_COMPLEX:复杂字体
    • FONT_HERSHEY_TRIPLEX:三倍线条宽度
    • FONT_HERSHEY_COMPLEX_SMALL:小版本的复杂字体
    • FONT_HERSHEY_SCRIPT_SIMPLEX:简单手写体
    • FONT_HERSHEY_SCRIPT_COMPLEX:复杂手写体
  5. fontScale (double):字体的缩放因子。值越大,字体越大。例如,1.0 表示标准大小。

  6. color (Scalar):文本的颜色。Scalar(B, G, R) 设置颜色,其中 BGR 分别表示蓝色、绿色和红色的强度,范围是 [0, 255]

  7. thickness (int, 默认值=1):文本线条的粗细。默认是 1 像素,值越大,线条越粗。

  8. lineType (int, 默认值=LINE_8):文本轮廓的线条类型:

    • LINE_8:8连接线条(默认值)
    • LINE_4:4连接线条
    • LINE_AA:抗锯齿线条,适用于高质量显示
  9. bottomLeftOrigin (bool, 默认值=false):如果为 true,文本的起点在图像底部;如果为 false(默认),起点在图像顶部。该参数常用于需要倒置坐标的图像中。



2. 示例代码

以下代码展示了如何在图像上绘制文本:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个白色背景图像
    cv::Mat img = cv::Mat::ones(400, 800, CV_8UC3) * 255;

    // 文本内容
    std::string text = "Hello, OpenCV!";

    // 文本位置
    cv::Point org(50, 200);

    // 字体类型
    int fontFace = cv::FONT_HERSHEY_SIMPLEX;

    // 字体缩放
    double fontScale = 1.5;

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

    // 线条粗细
    int thickness = 2;

    // 绘制文本
    cv::putText(img, text, org, fontFace, fontScale, color, thickness);

    // 显示图像
    cv::imshow("Image with Text", img);
    cv::waitKey(0);

    return 0;
}


3. 应用场景

  • 图像标注:标记目标区域或提供说明信息。
  • 调试:在图像上显示变量值或状态信息。
  • 用户界面:为图像添加说明文字或菜单。


4. 注意事项

  • putText 绘制的文本是直接渲染在图像上的,修改后不可撤销。
  • 如果图像较小或文字较大,建议使用抗锯齿 (LINE_AA) 提高文本显示效果。


posted @ 2024-10-31 13:47  做梦当财神  阅读(118)  评论(0编辑  收藏  举报