字体和文字

最后一种形式的绘图是绘制文字。当然,文字创建了一套自己的复杂格式,但是,在这类事情上,OpenCV一如既往地更关心提供一个简单的"一招解决问题"的方案,这个方案只适用于一些简单应用,而不适用于一个稳定的和完整的应用(这将降低由其他库提供的功能)。

OpenCV有一个主要的函数,叫cvPutText()。这个函数可以在图像上输出一些文本。参数text所指向的文本将打印到图像上,参数origin指定文本框左下角位置,参数color指定文本颜色。

 
   
   
   
   
  1. void cvPutText(  
  2.   CvArr*            img,  
  3.   const char*       text,  
  4.   CvPoint           origin,  
  5.   const CvFont*     font,  
  6.  
  7.   CvScalar          color  
  8. ); 

【80~81】

总有一些琐事使我们的工作比预期复杂,此时是CvFont指针表现的机会了。

概括地说,获取CvFont*指针的方式就是调用函数cvInitFont()。该函数采用一组参数配置一些用于屏幕输出的基本个特定字体。如果熟悉其他环境中的GUI编程,势必会觉得cvInitFont似曾相识,但只需更少的参数。

为了建立一个可以传值给cvPutText()的CvFont,首先必须声明一个CvFont变量,然后把它传递给cvInitFont()。

 
   
   
   
   
  1. void cvInitFont(  
  2.   CvFont*   font,  
  3.   int       font_face,  
  4.   double    hscale,  
  5.   double    vscale,  
  6.   double    shear     = 0,  
  7.   int       thickness = 1,  
  8.   int       line_type = 8 
  9. ); 

观察本函数与其他相似函数的不同。正如工作在OpenCV环境下的cvCreateImage()。调用cvInitFont()时,初始化一个已经准备好的CvFont结构(这意味着你创建了一个变量,并传给cvInitFont()函数一个指向新建的变量指针),而不是像cvCreateImage()那样创建一个结构并返回指针。

font_face参数列在表3-15中(效果在图3-6中画出),它可与CV_FONT_ITALIC组合(通过布尔或操作)。

表3-15:可用字体(全部可选变量)

标志名称                             描述

CV_FONT_HERSHEY_SIMPLEX

正常尺寸sanserif字体

CV_FONT_HERSHEY_PLAIN

小尺寸sanserif字体

CV_FONT_HERSHEY_DUPLEX

正常尺寸sanserif, 比
CV_FONT_HERSHEY_SIMPLEX更复杂

CV_FONT_HERSHEY_COMPLEX

正常尺寸serif, 比
CV_FONT_HERSHEY_DUPLEX更复杂

续表

标志名称                               描述

CV_FONT_HERSHEY_

TRIPLEX

正常尺寸serif, 比CV_FONT_
HERSHEY_COMPLEX更复杂

CV_FONT_HERSHEY_

COMPLEX_SMALL

小尺寸的
CV_FONT_HERSHEY_COMPLEX

CV_FONT_HERSHEY_

SCRIPT_SIMPLEX

手写风格

CV_FONT_HERSHEY_

SCRIPT_COMPLEX

CV_FONT_HERSHEY_SCRIPT_
SIMPLEX更复杂的风格

【81】

字体和文字_第1张图片 
(点击查看大图)图3-6:表3-15中的8个字体,绘制时设置
hscale = vscale = 1.0,且每行的垂直间距为30像素

hscale和vscale只能设为1.0或0.5。字体渲染时选择全高或半高(宽度同比缩放),绘制效果与指定字体的基本定义有关。

参数shear创建斜体字,如果设置为0.0 ,字体不倾斜。当设置为1.0 时,字符倾斜范围接近45度。

参数thickness与Line_type的定义与其他绘图函数相同。

你可能感兴趣的:(opencv,opencv,文字和字体,在图片上绘图)