由于 每次进行图像标注时都需要去查哪个字体好用,故在此将所有的字体应用实例列出来,方便后期使用。
1.putText函数原型
void cv::putText(
cv::Mat& img, // 待绘制的图像
const string& text, // 待绘制的文字
cv::Point origin, // 文本框的左下角
int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
double fontScale, // 尺寸因子,值越大文字越大
cv::Scalar color, // 线条的颜色(RGB)
int thickness = 1, // 线条宽度
int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
bool bottomLeftOrigin = false // true='origin at lower left'
);
opencv支持的文字字体有以下几种:
2.应用实例
简单写个程序看下文字不同效果
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
//创建空白图用于绘制文字
Mat image = Mat::zeros(Size(300, 300), CV_8UC3);
//设置蓝色背景
image.setTo(Scalar(100, 0, 0));
//设置绘制文本的相关参数
string text1 = "case 1: Hello World! 20210913";
string text2 = "case 2: Hello World! 20210913";
string text3 = "case 3: Hello World! 20210913";
string text4 = "case 4: Hello World! 20210913";
string text5 = "case 5: Hello World! 20210913";
string text6 = "case 6: Hello World! 20210913";
string text7 = "case 7: Hello World! 20210913";
string text8 = "case 8: Hello World! 20210913";
putText(image, text1, Point(20, 20), FONT_HERSHEY_COMPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text2, Point(20, 50), FONT_HERSHEY_COMPLEX_SMALL, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text3, Point(20, 80), FONT_HERSHEY_DUPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text4, Point(20, 110), FONT_HERSHEY_PLAIN, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text5, Point(20, 140), FONT_HERSHEY_SCRIPT_COMPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text6, Point(20, 170), FONT_HERSHEY_SCRIPT_SIMPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text7, Point(20, 200), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
putText(image, text8, Point(20, 230), FONT_HERSHEY_TRIPLEX, 0.5, Scalar(0, 255, 255), 1, 8, 0);
//显示绘制解果
namedWindow("image", WINDOW_GUI_NORMAL);
imshow("image", image);
waitKey(0);
return 0;
}
结果: