OpenCV(cv::putText())
- 1. 函数定义
- 2. 示例代码
- 3. 应用场景
- 4. 注意事项
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) 提高文本显示效果。