概述
在OpenCV中绘制文本,需要用到getTextSize()和putText()。
第一个函数:getTextSize()
函数说明
cv::getTextSize
(
const String & text,
int fontFace,
double fontScale,
int thickness,
int * baseLine
)
参数说明
text | 绘制的文本 |
fontFace | 字体 |
fontScale | 字体的放大倍数 |
thickness | 绘制线条的粗细 |
baseLine | 相对于最底部文本的基线y坐标指向 |
返回
返回包含指定文本框的大小,是cv::Size 类型。
第二个函数:putText()
函数说明
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 | 图像 |
text | 要绘制的文本 |
org | 绘制文本的左下角 |
fontFace | 字体 |
fontScale | 放大倍数 |
color | 颜色 |
thickness | 线宽 |
lineType | 线条类型 |
bottomLeftOrigin | false文本正常显示;true文本垂直翻转。 |
测试代码
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <vector>
using namespace cv;
using namespace std;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//新建画板
cv::Mat mat(500,600,CV_8UC3,Scalar(100,0,0));
//文本的参数
string text = "congratulations!";//定义文本
int fontFace = FONT_HERSHEY_COMPLEX_SMALL;//定义字体
double fontScale = 2;//定义大小
int thickness = 2;//定义线宽
int baseline = 0;
//获取文本框的大小
Size size = getTextSize(text,fontFace,fontScale,thickness,&baseline);
//文本位置
Point origin;
origin.x = mat.size().width/2 - size.width/2;
origin.y = mat.size().height/2 + size.height/2;
//其它参数
Scalar color = Scalar(0,255,0);//定义颜色
int lineType = 8;//定义线段类型
bool bottomLoftOrigin = false;//定义左远点
//绘制文本
putText(mat,text,origin,fontFace,fontScale,color,thickness,lineType,bottomLoftOrigin);
//显示
imshow("mat",mat);
}
Widget::~Widget()
{
delete ui;
}