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

     

     

  • 相关阅读:
    django 项目需要注意的一些点
    VUE之路
    Oracle 表格碎片的查看方法
    RHEL 6.x or 7.x 使用分区绑定ASM 磁盘的方法
    RMAN 修复主库 nologging 操作导致物理备库的坏块
    Oracle 数据库19c 回退降级到 11.2.0.4 方案
    如何评估oracle 数据库rman全备和增量备份大小
    在将Oracle GI和DB升级到19c或降级到以前的版本之前需要应用的补丁 (Doc ID 2668071.1)
    Oracle 数据库坏块处理
    opatch auto 安装11.2.0.4.20190115 PSU遇到 OUI-67133: Execution of PRE script failed,with returen value 1 报错
  • 原文地址:https://www.cnblogs.com/gune/p/6699428.html
Copyright © 2011-2022 走看看