cv::putText

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 );

  函数功能:在图像指定位置绘制文字;
  参数说明

参数名成 含义
cv::Mat& img 待绘制的图像,作为画布
const string& text 待绘制的文字
cv::Point org 文本框的左下角
int fontFace 字体 (如cv::FONT_HERSHEY_PLAIN)
double fontScale 尺寸因子,值越大文字越大
Scalar color 线条的颜色(RGB)
int thickness = 1 线条宽度,默认为1
int lineType = LINE_8 线型,4邻域或8邻域,默认8邻域
bool bottomLeftOrigin = false true=‘origin at lower left’

  注意:putText不支持中文;
  putText支持的字体格式为:

功能
FONT_HERSHEY_SIMPLEX 正常尺寸的sans-serif字体
FONT_HERSHEY_PLAIN 小字体的sans-serif字体
FONT_HERSHEY_DUPLEX 正常尺寸的sans-serif字体,稍微不同
FONT_HERSHEY_COMPLEX 正常尺寸的serif字体
FONT_HERSHEY_TRIPLEX 正常尺寸的serif字体,稍微不同
FONT_HERSHEY_COMPLEX_SMALL 小字体的serif字体
FONT_HERSHEY_SCRIPT_SIMPLEX 手写字体
FONT_HERSHEY_SCRIPT_COMPLEX 手写字体 ,稍微不同
FONT_ITALIC

cv::getTextSize()

 cv::Size cv::getTextSize(const string& text,cv::Point origin,int fontFace,double fontScale,int thickness,int* baseLine);

  函数功能:获取text的像素长度和宽度;Size中有width和height;其他参数应与putText保持一致,才能计算出正确数值;

测试代码

#include <iostream>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>using namespace std;
using namespace cv;void DrawText(Mat& img, string str, int x, int& y, int type, Scalar color)
{int baseline = 0;for (int i = 0; i < 5; i++){cv::Size str_size = cv::getTextSize("Liu And Wang", type, 1.0, i, &baseline);cv::putText(img, str.c_str(), Point(0, y + str_size.height), type, 1.0, color, i);y += str_size.height;}
}
int main()
{Mat img = cv::Mat::zeros(1024, 1024, CV_8UC3);int y = 0;// FONT_HERSHEY_SIMPLEXDrawText(img, "FONT_HERSHEY_SIMPLEX", 0, y, FONT_HERSHEY_SIMPLEX, Scalar(255, 255, 255));DrawText(img, "FONT_HERSHEY_PLAIN", 0, y, FONT_HERSHEY_PLAIN, Scalar(255, 0, 0));DrawText(img, "FONT_HERSHEY_DUPLEX", 0, y, FONT_HERSHEY_DUPLEX, Scalar(0, 255, 0));DrawText(img, "FONT_HERSHEY_COMPLEX", 0, y, FONT_HERSHEY_COMPLEX, Scalar(0, 0, 255));DrawText(img, "FONT_HERSHEY_TRIPLEX", 0, y, FONT_HERSHEY_TRIPLEX, Scalar(128, 128, 128));DrawText(img, "FONT_HERSHEY_COMPLEX_SMALL", 0, y, FONT_HERSHEY_COMPLEX_SMALL, Scalar(128, 128, 0));DrawText(img, "FONT_HERSHEY_SCRIPT_SIMPLEX", 0, y, FONT_HERSHEY_SCRIPT_SIMPLEX, Scalar(0, 128, 128));DrawText(img, "FONT_HERSHEY_SCRIPT_COMPLEX", 0, y, FONT_HERSHEY_SCRIPT_COMPLEX, Scalar(128, 0, 128));DrawText(img, "FONT_ITALIC", 0, y, FONT_ITALIC, Scalar(255, 255, 255));imshow("Image", img);waitKey(0);system("pause");
}

Sans Serif和Serif

  在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代码时常常要使用等宽字体。
  Serif的意思是,在字的笔划开始及结束的地方有额外的装饰,而且笔划的粗细会因直横的不同而有不同。相反的,Sans Serif则没有这些额外的装饰,笔划粗细大致差不多。如下图:

  可以看出,我们平时所用的Georgia、Times New Roman等就属于Serif字体,而Arial、Tahoma、Verdana等则属于Sans Serif字体。对中文而言,同样存在这两大种类,很明显,宋体、细明体(繁体中常用)等就属于Serif,而黑体、幼圆等则属于Sans Serif。

Serif和Sans Serif的一般比较:

  ①Serif的字体容易辨认,因此易读性较高。反之Sans Serif则较醒目,但在行文阅读的情况下,Sans Serif容易造成字母辨认的困扰,常会有来回重读及上下行错乱的情形。
  ②Serif强调了字母笔划的开始及结束,因此较易前后连续性的辨识。
  ③Serif强调一个word,而非单一的字母,反之Sans Serif则强调个别字母。
  ④在小字体的场合,通常Sans Serif比Serif更清晰。
  因为黑体字属于“无衬线体”(Sans-serif),而宋体字属于“有衬线体”(Serif),后者对于人眼的辨识来说会更轻松一些,所以阅读的时候会比较舒服。日本文字偏欧美的无衬线体(Sans-serif),所以大部分的人都使用歌德体(相当于西洋文字的无衬线体)。

适用用途:

  通常文章的内文、正文使用的是易读性较佳的Serif字体,这可增加易读性,而且长时间阅读下因为会以word为单位来阅读,较不容易疲倦。而标题、表格内用字则採用较醒目的Sans Serif字体,它需要显着、醒目,但不必长时间盯着这些字来阅读。
  像宣传品、海报类,为求醒目,它的短篇的段落也会採用Sans Serif字体。但在书籍、报刊杂志,正文有相当篇幅的情形下,则应採用Serif字体来减轻读者阅读上的负担。在Web设计及浏览器设置中也应遵循此原则为是。

引用

1.Serif和Sans-serif字体的区别

Opencv练习-绘制文字-putText相关推荐

  1. OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)

    OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...

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

    OPenCV版本:4.4 IDE:VS2017 功能描述 简述:在一个图像里绘制文字. 函数 cv::putText在图像里渲染指定的字符串. 符号不能被渲染,用问号来代替.参见 getTextSiz ...

  3. OpenCV 文字绘制----cv::putText详解

    opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数--在图像上绘制文字.这个函数cv::putText(). 具体形式如下: void cv::putText( cv::Mat&a ...

  4. OpenCV 文字绘制cv::putText详解

    ref:https://blog.csdn.net/guduruyu/article/details/68491211 https://blog.csdn.net/keith_bb/article/d ...

  5. [转] OpenCV 文字绘制cv::putText详解

    ref:[OpenCV3]文字绘制--cv::putText详解_cv.puttext_PHILOS_THU的博客-CSDN博客 opencv学习(十三)之文本文字插入_opencv视频添加文本并保存 ...

  6. OpenCV 【十六】RNG随机数发生器putText绘制文字

    1 目的 使用 随机数发生器类 (RNG) 并得到均匀分布的随机数. 通过使用函数 putText 显示文字. 第一步是实例化一个 Random Number Generator(随机数发生器对象) ...

  7. 使用Python,OpenCV进行涂鸦(绘制文字、线、圆、矩形、椭圆、多边形轮廓、多边形填充、箭头~)

    使用Python,OpenCV进行涂鸦(绘制文字.线.圆.矩形.椭圆.多边形轮廓.多边形填充.箭头) 1. 效果图 2. 原理 2.1 绘制线:cv2.line(canvas, (300, 0), ( ...

  8. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用

    基本绘图 目的 本节你将学到: 如何用 Point 在图像中定义 2D 点 如何以及为何使用 Scalar 用OpenCV的函数 line 绘 直线 用OpenCV的函数 ellipse 绘 椭圆 用 ...

  9. OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

    学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数. 1.画线条--line()函数 介绍: cv2.line(image, start_point, en ...

最新文章

  1. Apache常见功能实战详解
  2. Py之wxPython:利用wxPython设计GUI界面(图片背景+简单按钮)
  3. 网络Socket,ServerSocket
  4. 【ArcGIS风暴】ArcGIS中等高线高程标注/注记(打断/消隐)方法案例汇总
  5. 前端学习(2610):vuex实现删除
  6. CSS的@media与@media screen,媒体查询
  7. SLB+Tomcat时request.RemoteAddr无法获取正确的客户端IP的问题解决方案
  8. 多线程下的进程同步(线程同步问题总结篇)
  9. Blend_技巧篇_淡入淡出
  10. 安装pptp ×××
  11. 常见批处理作业调度算法
  12. 方波信号小波去噪matlab,Matlab小波去噪
  13. 耗时86小时的「百变小樱」最强数据可视化作品!
  14. 趋势预测方法(五)Holt-Winters模型_时序递推预测
  15. 什么是路由器 它的工作原理是什么
  16. excel在每行下面添加插入指定行数的空白行方法步骤
  17. 2021年 - 年终总结
  18. 程序人生 - 变脸的原理
  19. 代码整洁之道读书笔记(Ch4-Ch7)
  20. 安东尼罗宾--激发你的无限潜能[连载]--1 2章

热门文章

  1. vue2.0运行导入的项目出现node:events:491 throw er; // Unhandled ‘error‘ event错误提示解决办法
  2. html中怎么把文字环绕圆形,Photoshop如何制作环绕圆形路径文字(章环绕的圆形文字)及使用技巧记录...
  3. Python实现暗通道去雾算法——清晰还原雾天景色
  4. ipad一直卡在白苹果_ipad一直卡在白苹果
  5. Windows应用程序无法正常启动(0xc0000013)的解决
  6. 华为平板matepad鸿蒙,华为平板 MatePad Pro 来了!首搭鸿蒙系统,与电脑“花样”协同…...
  7. css局部上下滚动及隐藏滚动条
  8. 达拉崩吧java,当剽窃贼遇见《达拉崩吧》,网友:这届玩家过分沙雕,惹不起...
  9. 红米10x和红米note8pro哪个好
  10. 苹果手机数据线充不了电_严选|同时充4台手机的充电宝!容量大充电快、自带数据线,还能显示电量|数据线|电池|手机|安卓|硅胶...