zoukankan      html  css  js  c++  java
  • 【opencv】opencv在图片、视频嵌中英文字符的方法

    转自:http://www.cnblogs.com/hujingshuang/p/5119015.html

            说明:本博文是根据前人已有的成果并结合自己的理解而成的。为了避免让读者感到繁琐,我将运用小学及初中学习的总分总、承上启下的写作技巧进行讲解,力图做到详略有致,言简意赅,图文并茂,通俗易懂。

            实验平台:VS2010 + opencv2.4.10 (其他版本搭配也是一样的做法)

            简介:在opencv中,不可避免的会遇到在一幅图像、一段视频或者实时的监控画面上嵌入特定的文字来标识,让人一目了然。那么怎么利用opencv在这些对象上嵌入英文或者是汉字呢?下面切入正题,就嵌入英文和中文字符2个部分,分别做阐述。

            一、嵌入英文字符(opencv自带函数)

            这一部分比较简单,利用opencv自带的cvInitFont()和cvPutText()函数就可以了。【具体使用方法请百度,这里不做详细说明】

           直接放上演示代码和效果图。

    demo1源码:

     

    1. #include<iostream>  
    2. #include<opencv2/highgui/highgui.hpp>  
    3.   
    4. using namespace cv;  
    5.   
    6. int main(void)  
    7. {  
    8.     IplImage *img = cvLoadImage("wall.jpg");  
    9.     CvFont font;  
    10.   
    11.     cvInitFont(&font, CV_FONT_HERSHEY_DUPLEX, 1, 1, 0, 2, 4);  
    12.   
    13.     cvPutText(img, "This is demo 1.", cvPoint(200, 65), &font, CV_RGB(255, 0, 0));  
    14.     cvPutText(img, "http://blog.csdn.net/hujingshuang", cvPoint(20, 125), &font, CV_RGB(255, 0, 0));  
    15.   
    16.     cvNamedWindow("demo1:图片嵌入字符", CV_WINDOW_AUTOSIZE);  
    17.     cvShowImage("demo1:图片嵌入字符", img);  
    18.   
    19.     cvWaitKey(0);  
    20.     cvDestroyWindow("demo1:图片嵌入字符");  
    21.     return 0;  
    22. }  

    demo1效果图:

                                                      .     

            二、嵌入中文字符(FreeType)
                   这一部分比较麻烦,但只需按照下面的步骤一步一步来就行,为方便叙述,我以自己的opencv安装目录为例(D:opencv),请读者根据自己的目录操作。
                  1、首先,下载两个文件。

                         ①FreeType(版本随意):我用的是freetype-2.5.5,下载地址:http://sourceforge.net/projects/freetype/files/freetype2/

                         ②simhei.ttf字体工具:如果你的C:WindowsFonts目录下有,就不用下载。【一般情况下都有】

                  2、其次,需要两个lib库支持。即:freetype255.lib与freetype255d.lib,需要由自己编译得到。用vs2010打开..freetype-2.5.5uildswindowsvc2010freetype.sln解决方案(与vs版本对应),在Debug模式下按F5编译,待编译完毕;再切到Release模式下F5,如果编译中出现错误,不要理会。此时在目录freetype-2.5.5objsvc2010Win32下已生成了两个lib,将其复制到D:opencvuildx86vc10lib文件夹下。
                  3、在D:opencvuildinclude下新建文件夹freetype,将..freetype-2.5.5下的include和src,以及CvxText.cpp、CvxText.h、stdafx.cpp、stdafx.h、targetver.h拷贝到此文件夹下,至此繁琐的工作已做完。【此处说明:需要修改CvxText.cpp文件,即:在CvxText.cpp文件首行添加#include”stdafx.h”,在函数setFont末尾加入FT_Set_Pixel_Sizes(m_face, (int)m_fontSize.val[0], 0)语句,附件包中已做了修改】


                                                                                                    .   

     

                       4、下面新建一个空项目,将CvxText.cpp拷到项目目录下,并添加到ResourceFiles,接下来就很简单了。

                                                                                               .

     

                      在项目属性里添加include路径:

                                                                          .  

     


                     再添加lib路径:D:opencvuildx86vc10lib

                                                                                  .   


                      在Linker—>Input中增加依赖项:freetype255d.lib、freetype255.lib

                                                                                   .  

     这样配置就完成了,接下来就是代码和效果图:

    demo2源码:

    1. #include<iostream>  
    2. #include<stdlib.h>  
    3. #include<opencv2/core/core.hpp>  
    4. #include<opencv2/highgui/highgui.hpp>  
    5. #include<opencv2/imgproc/imgproc.hpp>  
    6. #include<opencv/CvxText.h>  
    7.   
    8. int main(void)  
    9. {  
    10.     IplImage *img = cvLoadImage("wall.jpg");  
    11.     CvxText text("C:\WINDOWS\Fonts\simhei.ttf");//此目录下有很多tff格式文件,有兴趣可一一实验,选择最喜欢的字体。  
    12.       
    13.     float p = 1;  
    14.         text.setFont(NULL, NULL, NULL, &p);   // 透明处理  
    15.   
    16.     text.putText(img, "demo2:图片嵌入中文字符", cvPoint(180, 65), CV_RGB(0,0,255));  
    17.     text.putText(img, "参见博客:http://blog.csdn.net/hujingshuang", cvPoint(120, 110), CV_RGB(0,0,255));  
    18.   
    19.     cvNamedWindow("demo2:图片嵌入中文字符", CV_WINDOW_AUTOSIZE);  
    20.     cvShowImage("demo2:图片嵌入中文字符", img);  
    21.   
    22.     cvWaitKey(0);  
    23.     cvDestroyWindow("demo2:图片嵌入中文字符");  
    24.   
    25.     return 0;  
    26. }  

    demo2效果图:

                                                         .   

            至此,利用opencv在图像中嵌入中英文字符已讲解完毕。由此及彼,便可在视频中嵌入感兴趣的字符。源码及所有需要的文件都已打包上传,详情下载附件:http://download.csdn.net/detail/hujingshuang/8394121

    高版本opencv接口

     

    Mat img = imread( "lena.jpg", 1 );
    string text = "lena,female";
    Point pt(50,100);
    Scalar color = CV_RGB(0,255,255);
    putText(img,text,pt,CV_FONT_HERSHEY_DUPLEX,1.0f,color);

     

     

  • 相关阅读:
    ubuntu 12.04 mysql转移目录后 无法 启动
    thinkphp 缓存写入失败,网站报错
    python 访问php程序,实现定时
    Linux下通过软链接转移mysql目录,解决分区空间不足(转)
    nginx 自定义代理返回 404
    discuz xplus 模板 没解析的问题
    svn 日志 offline 错误
    nginx 代理 proxy_pass设置
    discuz注册 内部错误
    centos 不支持mysql
  • 原文地址:https://www.cnblogs.com/gune/p/6699428.html
Copyright © 2011-2022 走看看