OpenCV文字绘制函数putText()的使用

OPenCV版本:4.4

IDE:VS2017

功能描述

简述:在一个图像里绘制文字。

函数 cv::putText在图像里渲染指定的字符串. 符号不能被渲染,用问号来代替。参见 getTextSize 是一个文字渲染的代码示例.

函数原型

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 字符类型,参见 HersheyFonts

  • 参数 fontScale 字体比例因子,被字体指定的基础大小所乘。

  • 参数 color 文字颜色

  • 参数 thickness 划线的厚度

  • 参数 lineType 划线类型,参见 LineTypes

  • 参数 bottomLeftOrigin 当是true的时候,图像数据源在左下角,否则是在左上角

源码示例

#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");
		
	std::string text = "I am juice";
	int font_face = cv::FONT_HERSHEY_COMPLEX;
	double font_scale = 2;
	int thickness = 4;
	int baseline;

	//文本框的长宽
	cv::Size text_size = cv::getTextSize(text, font_face, font_scale, thickness, &baseline);

	//文本框居中绘制
	cv::Point origin;
	origin.x = image.cols / 2 - text_size.width / 2;
	origin.y = image.rows / 2 + text_size.height / 2;
	putText(image, text, origin, font_face, font_scale, cv::Scalar(255, 0, 0), thickness, 8, 0);

	imshow("文本绘制", image);
	cv::waitKey(0);
	return 0;
}

运行结果:

在这里插入图片描述

附注

字体类型:

enum HersheyFonts {
    FONT_HERSHEY_SIMPLEX        = 0, //!< 常规大小 没有衬线的字体
    FONT_HERSHEY_PLAIN          = 1, //!< 小号 没有衬线的字体
    FONT_HERSHEY_DUPLEX         = 2, //!< 常规大小 复杂的没有衬线的字体
    FONT_HERSHEY_COMPLEX        = 3, //!< 常规大小 衬线字体
    FONT_HERSHEY_TRIPLEX        = 4, //!< 常规大小 复杂的衬线字体
    FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< 小号 衬线字体
    FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< 手写风格的字体
    FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< 复杂的手写风格的字体
    FONT_ITALIC                 = 16 //!< 斜体字体
};

西方国家字母体系分为两类:衬线字体(serif)和无衬线体(sans serif)。

衬线字体:字的笔画开始、结束的地方有额外的装饰,而且笔画的粗细会有所不同。

无衬线体:是无衬线字体,没有这些额外的装饰,而且笔画的粗细差不多。

中文字体中的宋体就是一种最标准的衬线字体,衬线的特征非常明显。字形结构也和手写的楷书一致。因此宋体一直被做为最适合的正文字体。

线型:

enum LineTypes {
    FILLED  = -1,
    LINE_4  = 4, //!< 4-connected line
    LINE_8  = 8, //!< 8-connected line
    LINE_AA = 16 //!< antialiased line
};

值越大字体越圆滑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值