一、函数:
a.putText
函数:
(1)函数原型:
CV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,
int fontFace, double fontScale, Scalar color, int thickness = 1,
int lineType = LINE_8, bool bottomLeftOrigin = false );
(2)函数作用:
putText
函数在图像img
上渲染指定的文本字符串。如果某些字符无法使用指定的字体渲染,则会被问号替代。
(3)参数说明:
img
:要绘制文本的图像。text
:要绘制的文本字符串。org
:文本字符串在图像中的起始点(左下角)。fontFace
:字体类型,见HersheyFonts
。fontScale
:字体缩放因子,乘以字体特定的基础大小。color
:文本颜色,使用Scalar
类型表示。thickness
:用于绘制文本的线条厚度,默认值为 1。lineType
:线条类型,见LineTypes
,默认值为LINE_8
,表示线条的抗锯齿。bottomLeftOrigin
:当设置为 true 时,表示图像数据的原点在左下角。否则,原点在左上角。
(4)文本渲染:
getTextSize
函数,它可以用于获取文本渲染所需的大小,这对于文本渲染代码很有用。
(5)特殊字符处理:
- 如果文本中包含无法使用当前字体渲染的字符,这些字符将被问号替代。
(6)坐标原点:
bottomLeftOrigin
参数决定了图像的坐标原点位置。在图像处理中,根据这个参数的不同,图像的坐标系可能以左下角或左上角作为原点。
b.HersheyFonts
枚举类型(Hershey字体 );
FONT_HERSHEY_SIMPLEX
:正常大小的无衬线字体。FONT_HERSHEY_PLAIN
:小尺寸的无衬线字体。FONT_HERSHEY_DUPLEX
:正常大小的无衬线字体,比FONT_HERSHEY_SIMPLEX
更复杂。FONT_HERSHEY_COMPLEX
:正常大小的有衬线字体。FONT_HERSHEY_TRIPLEX
:正常大小的有衬线字体,比FONT_HERSHEY_COMPLEX
更复杂。FONT_HERSHEY_COMPLEX_SMALL
:FONT_HERSHEY_COMPLEX
的较小版本。FONT_HERSHEY_SCRIPT_SIMPLEX
:手写风格字体。FONT_HERSHEY_SCRIPT_COMPLEX
:FONT_HERSHEY_SCRIPT_SIMPLEX
的更复杂变体。FONT_ITALIC
:斜体字体的标志,可以与其他Hershey字体结合使用来创建斜体效果。
二、示例代码 :
#include <opencv2/core/utils/logger.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);
Mat img = Mat::zeros(500, 500, CV_8UC3);//黑色背景
//定义Hershey字体
int typeface[] = { 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, FONT_ITALIC };
for (int i = 0; i < 8; i++) {
//Hershey字体不支持中文
putText(img, "OpenCV", Point(100, (i + 1) * 50), typeface[i], 1.2, Scalar(255, 255, 255), 2, LINE_AA);
}
namedWindow("image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow("image", img);
waitKey(0);
destroyAllWindows();
return 0;
}