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
);
参数解析:
-
img
(InputOutputArray):目标图像(通常是彩色图像,也可以是灰度图像)。文本会在此图像上绘制,必须是可修改的(如cv::Mat
)。 -
text
(const String&):要绘制的文本内容,类型为字符串,可以是字母、数字等字符。 -
org
(Point):文本的起始点。Point(x, y)
表示文本的左下角(默认情况下),其中x
和y
是坐标值,(0, 0)
为图像的左上角。 -
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
:复杂手写体
-
fontScale
(double):字体的缩放因子。值越大,字体越大。例如,1.0
表示标准大小。 -
color
(Scalar):文本的颜色。Scalar(B, G, R)
设置颜色,其中B
、G
和R
分别表示蓝色、绿色和红色的强度,范围是[0, 255]
。 -
thickness
(int, 默认值=1):文本线条的粗细。默认是1
像素,值越大,线条越粗。 -
lineType
(int, 默认值=LINE_8):文本轮廓的线条类型:LINE_8
:8连接线条(默认值)LINE_4
:4连接线条LINE_AA
:抗锯齿线条,适用于高质量显示
-
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
) 提高文本显示效果。