注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

慵懒的乌龟

——若有,且珍惜~

 
 
 

日志

 
 

Opencv给图像添加字幕cvInitFont、cvPutText  

2012-05-24 09:31:24|  分类: opencv 学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在Opencv中给图像添加字幕很常见,这里将添加的方法大体介绍一下,主要用到以下两个函数:

cvInitFont:

CVAPI(void)  cvInitFont( CvFont* font, int font_face,

                         double hscale, double vscale,

                         double shear CV_DEFAULT(0),

                         int thickness CV_DEFAULT(1),

                         int line_type CV_DEFAULT(8));//初始化字幕

cvPutText:

CVAPI(void)  cvPutText( CvArr* img, const char* text, CvPoint org,

                        const CvFont* font, CvScalar color );//在图像上写字幕


下面给出来一个来自http://blog.sina.com.cn/s/blog_675662490100idc0.html的例子,作者对字幕进行了居中等操作:

 主要是cvGetTextSize(text, &font, &text_size, &baseline);

       cvPoint(2,text_size.height+baseline)

 这样写出的字才对齐得更好些。

   CvPoint pt;
   pt.x = point.x - text_size.width/2; //这样的设置为字体(左右)居中对齐
   pt.y = point.y + (text_size.height+baseline)/2; //这样的设置为字体(上下)居中对齐

 

  if(i==0) pt.y = (AVIFRAME_COLORBAR_HEIGHT-AVIFRAME_BAR_HEIGHT)+10; //设置字体输出的具体位置
  else if(i==portion) pt.y=AVIFRAME_COLORBAR_HEIGHT-5;

 //Stage x
 CvFont font;
 cvInitFont(&font,CV_FONT_HERSHEY_DUPLEX ,1.0f,1.0f,0,1,CV_AA);
 
 char text[20];
 sprintf(text,"Stage%d",nIndex);
 CvSize text_size;
 int baseline;
 cvGetTextSize(text, &font, &text_size, &baseline);
 cvPutText(aviFrame,text,cvPoint(20,text_size.height+baseline),&font, CV_RGB(255,0,0));

 

//makeTilte
 CvFont font;
 cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX,0.35f,0.7f,0,1,CV_AA);
 char* text="Major Strain[%]";
 CvSize text_size;
 int baseline;
 cvGetTextSize(text, &font, &text_size, &baseline);
 cvPutText(colorbar,text,cvPoint(2,text_size.height+baseline),&font,CV_RGB(0,0,0));

 

//写刻度值
 double gap=(maxLimit-minLimit)/double(portion);
 CvPoint pt;
 char  buffer[30];
 double value;
 cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX ,0.5f,0.5f,0,1,CV_AA);
 for(i=0;i<=portion;i++)
 
  value = (maxLimit- i*gap)*100;
  sprintf(buffer,"%4.2f",value);
  pt.x=AVIFRAME_BAR_WIDTH+10;
  if(i==0) pt.y = (AVIFRAME_COLORBAR_HEIGHT-AVIFRAME_BAR_HEIGHT)+10;
  else if(i==portion) pt.y=AVIFRAME_COLORBAR_HEIGHT-5;

  else pt.y=i*AVIFRAME_BAR_HEIGHT/portion+(AVIFRAME_COLORBAR_HEIGHT-AVIFRAME_BAR_HEIGHT);
  cvPutText(colorbar,buffer,pt,&font, CV_RGB(0,0,0));
 }

 

void CYnPlot::MakeLabelImage(IplImage** pImage,const char* text,double scale)
{
 CvFont font;
 cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX ,0.5f*scale,0.5f*scale,0,1,CV_AA);
 
 CvSize text_size;
 cvGetTextSize(text, &font, &text_size, NULL);
 
 if (*pImage) cvReleaseImage(pImage);
 *pImage = cvCreateImage(cvSize(text_size.width+5,text_size.height+10),8,3);
 cvSet(*pImage,CV_RGB(255,255,255));
 cvPutText(*pImage,text,cvPoint(2,text_size.height+3),&font, CV_RGB(0,0,0));
}

 

void CYnPlot::MakeTitleImage(IplImage** pImage,const char* text)
{
 CvFont font;
 cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX ,0.7f,0.7f,0,1,CV_AA);
 
 CvSize text_size;
 cvGetTextSize(text, &font, &text_size, NULL);
 
 if (*pImage) cvReleaseImage(pImage);
 *pImage = cvCreateImage(cvSize(text_size.width+5,text_size.height+10),8,3);
 cvSet(*pImage,CV_RGB(255,255,255));
 cvPutText(*pImage,text,cvPoint(2,text_size.height+3),&font, CV_RGB(0,0,0));
}

 

   CvFont font;
   CvSize text_size;
   cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX ,0.35f,0.35f,0,1,CV_AA);

 

   CvFont font;
   double hscale = 0.2f*_pointSize;
   cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX ,hscale,hscale,0,1,CV_AA);
   
   CvSize text_size;
   int baseline;   
   cvGetTextSize(text, &font, &text_size,&baseline);
   CvPoint pt;
   pt.x = point.x - text_size.width/2;
   pt.y = point.y + (text_size.height+baseline)/2;
   cvPutText(m_pPlotImage,text,pt,&font, color);

 

   CvFont font;
   double hscale = 0.2f*_pointSize;
   cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX ,hscale,hscale,0,1,CV_AA);
   
   CvSize text_size;
   int baseline;   
   cvGetTextSize(text, &font, &text_size,&baseline);
   CvPoint pt;
   pt.x = point.x - text_size.width/2;
   pt.y = point.y + (text_size.height+baseline)/2;
   cvPutText(m_pPlotImage,text,pt,&font, color);


  评论这张
 
阅读(5328)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017