Opencv中在图片上显示文本

字体和文字

最后一种形式的绘图是绘制文字。当然,文字创建了一套自己的复杂格式,但是,在这类事情上,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. ); 

总有一些琐事使我们的工作比预期复杂,此时是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参数列在下表,它可与CV_FONT_ITALIC组合(通过布尔或操作)


 CV_FONT_HERSHEY_SIMPLEX -  正常大小无衬线字体。 
   CV_FONT_HERSHEY_PLAIN -  小号无衬线字体。 
   CV_FONT_HERSHEY_DUPLEX -  正常大小无衬线字体比 CV_FONT_HERSHEY_SIMPLEX 更复杂) 
   CV_FONT_HERSHEY_COMPLEX -  正常大小有衬线字体。 
   CV_FONT_HERSHEY_TRIPLEX -  正常大小有衬线字体 (  比 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 更复杂。
   参数能够由一个值和可选择的 CV_FONT_ITALIC  字体标记合成。就是斜体字。 
hscale :字体宽度。如果等于 1.0f,字符的宽度是最初的字体宽度。如果等于 0.5f,字符的宽度是最初的字体宽度的一半。 
vscale:字体高度。如果等于 1.0f,字符的高度是最初的字体高度。如果等于 0.5f,字符的高度是最初的字体高度的一半。  
shear :字体的斜度。当值为 0时  ,字符不倾斜。当值为 1.0f时,字体倾斜 45度。 
thickness :字体笔划的粗细程度。 



例子:


#include<cv.h>
#include <highgui.h> 
#include <iostream>  
using namespace std;
int main(int argc, char** argv){
IplImage *src1;
src1 = cvLoadImage(argv[2],1);
cvNamedWindow("1", CV_WINDOW_AUTOSIZE);
CvFont  font;
cvInitFont(&font,
CV_FONT_HERSHEY_SIMPLEX,
1.0, 1.0
);
cvPutText(src1, "Hello", cvPoint(200,200), &font, cvScalar(255, 0, 0));
        cvShowImage("1", src1);
cvWaitKey(0);
cvReleaseImage(&src1);
return 0;
}

效果如下:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值