aihot  2017-05-27 15:17:32  OpenCV |   查看评论   

 由于OpenCV自带的cvInitFont和cvPutText函数不支持向图像中写入中文,参考http://www.opencv.org.cn/forum/viewtopic.php?t=2083 中的方法,在windows7 64位机上用vs2008+OpenCV2.3.1实现具体步骤如下:

 
 
 
1、新建一个控制台工程Test,先按照 http://blog.csdn.net/fengbingchun/article/details/7288079 中步骤配置;
 
2、将C:\WINDOWS\Fonts\simhei.ttf文件和CvxText.h、CvxText.cpp文件复制到工程Test文件夹下,并添加到Test工程中;
 
3、将CvxText.h中的#include<cv.h> #include <highgui.h>用#include<opnecv2/opencv.hpp>替代;
 
4、在CvxText.cpp文件首行添加#include”stdafx.h”,在函数setFont末尾加入FT_Set_Pixel_Sizes(m_face, (int)m_fontSize.val[0], 0)语句;
 
5、将include和lib两个文件夹放到D:\soft\OpenCV2.3.1\FreeType文件夹下;
 
6、Tool-->Options-->VC++ Directories:选择Include files:D:\soft\OpenCV2.3.1\FreeType\include;选择Library files:D:\soft\OpenCV2.3.1\FreeType\lib;
 
7、打开Property ,在Release和Debug下分别Linker-->Input-->Additional Dependencies添加freetype235.lib;
 
8、将原main.cpp文件内容复制到Test.cpp中,将#include<cv.h> #include <highgui.h>用#include<opnecv2/opencv.hpp>替代,将图像lena.jpg复制到工程Test文件夹下,编译运行即可。
 
CvxText.h:
  1. //====================================================================  
  2. //====================================================================  
  3. //  
  4. // 文件: CvxText.h  
  5. //  
  6. // 说明: OpenCV汉字输出  
  7. //  
  8. // 时间:   
  9. //  
  10. // 作者: chaishushan#gmail.com  
  11. //  
  12. //====================================================================  
  13. //====================================================================  
  14.   
  15. #ifndef OPENCV_CVX_TEXT_2007_08_31_H  
  16. #define OPENCV_CVX_TEXT_2007_08_31_H  
  17.   
  18. /** 
  19. * \file CvxText.h 
  20. * \brief OpenCV汉字输出接口 
  21. * 
  22. * 实现了汉字输出功能。 
  23. */  
  24.   
  25. #include <ft2build.h>  
  26. #include FT_FREETYPE_H  
  27.   
  28. #include <cv.h>  
  29. #include <highgui.h>  
  30.   
  31. /** 
  32. * \class CvxText 
  33. * \brief OpenCV中输出汉字 
  34. * 
  35. * OpenCV中输出汉字。字库提取采用了开源的FreeFype库。由于FreeFype是 
  36. * GPL版权发布的库,和OpenCV版权并不一致,因此目前还没有合并到OpenCV 
  37. * 扩展库中。 
  38. * 
  39. * 显示汉字的时候需要一个汉字字库文件,字库文件系统一般都自带了。 
  40. * 这里采用的是一个开源的字库:“文泉驿正黑体”。 
  41. * 
  42. * 关于"OpenCV扩展库"的细节请访问 
  43. * http://code.google.com/p/opencv-extension-library/ 
  44. * 
  45. * 关于FreeType的细节请访问 
  46. * http://www.freetype.org/ 
  47. * 
  48. * 例子: 
  49. * 
  50. * \code 
  51. int main(int argc, char *argv[]) 
  52. { 
  53.    // 定义CvxApplication对象 
  54.  
  55.    CvxApplication app(argc, argv); 
  56.  
  57.    // 打开一个影象 
  58.  
  59.    IplImage *img = cvLoadImage("test.jpg", 1); 
  60.  
  61.    // 输出汉字 
  62.  
  63.    { 
  64.       // "wqy-zenhei.ttf"为文泉驿正黑体 
  65.  
  66.       CvText text("wqy-zenhei.ttf"); 
  67.  
  68.       const char *msg = "在OpenCV中输出汉字!"; 
  69.  
  70.       float p = 0.5; 
  71.       text.setFont(NULL, NULL, NULL, &p);   // 透明处理 
  72.  
  73.       text.putText(img, msg, cvPoint(100, 150), CV_RGB(255,0,0)); 
  74.    } 
  75.    // 定义窗口,并显示影象 
  76.  
  77.    CvxWindow myWin("myWin"); 
  78.    myWin.showImage(img); 
  79.  
  80.    // 进入消息循环 
  81.  
  82.    return app.exec(); 
  83. } 
  84. * \endcode 
  85. */  
  86.   
  87. class CvxText    
  88. {  
  89.    // 禁止copy  
  90.   
  91.    CvxText& operator=(const CvxText&);  
  92.   
  93.    //================================================================  
  94.    //================================================================  
  95.   
  96. public:  
  97.   
  98.    /** 
  99.     * 装载字库文件 
  100.     */  
  101.   
  102.    CvxText(const char *freeType);  
  103.    virtual ~CvxText();  
  104.   
  105.    //================================================================  
  106.    //================================================================  
  107.   
  108.    /** 
  109.     * 获取字体。目前有些参数尚不支持。 
  110.     * 
  111.     * \param font        字体类型, 目前不支持 
  112.     * \param size        字体大小/空白比例/间隔比例/旋转角度 
  113.     * \param underline   下画线 
  114.     * \param diaphaneity 透明度 
  115.     * 
  116.     * \sa setFont, restoreFont 
  117.     */  
  118.   
  119.    void getFont(int *type,  
  120.       CvScalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);  
  121.   
  122.    /** 
  123.     * 设置字体。目前有些参数尚不支持。 
  124.     * 
  125.     * \param font        字体类型, 目前不支持 
  126.     * \param size        字体大小/空白比例/间隔比例/旋转角度 
  127.     * \param underline   下画线 
  128.     * \param diaphaneity 透明度 
  129.     * 
  130.     * \sa getFont, restoreFont 
  131.     */  
  132.   
  133.    void setFont(int *type,  
  134.       CvScalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);  
  135.   
  136.    /** 
  137.     * 恢复原始的字体设置。 
  138.     * 
  139.     * \sa getFont, setFont 
  140.     */  
  141.   
  142.    void restoreFont();  
  143.   
  144.    //================================================================  
  145.    //================================================================  
  146.   
  147.    /** 
  148.     * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。 
  149.     * 
  150.     * \param img  输出的影象 
  151.     * \param text 文本内容 
  152.     * \param pos  文本位置 
  153.     * 
  154.     * \return 返回成功输出的字符长度,失败返回-1。 
  155.     */  
  156.   
  157.    int putText(IplImage *img, const char    *text, CvPoint pos);  
  158.   
  159.    /** 
  160.     * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。 
  161.     * 
  162.     * \param img  输出的影象 
  163.     * \param text 文本内容 
  164.     * \param pos  文本位置 
  165.     * 
  166.     * \return 返回成功输出的字符长度,失败返回-1。 
  167.     */  
  168.   
  169.    int putText(IplImage *img, const wchar_t *text, CvPoint pos);  
  170.   
  171.    /** 
  172.     * 输出汉字。遇到不能输出的字符将停止。 
  173.     * 
  174.     * \param img   输出的影象 
  175.     * \param text  文本内容 
  176.     * \param pos   文本位置 
  177.     * \param color 文本颜色 
  178.     * 
  179.     * \return 返回成功输出的字符长度,失败返回-1。 
  180.     */  
  181.   
  182.    int putText(IplImage *img, const char    *text, CvPoint pos, CvScalar color);  
  183.   
  184.    /** 
  185.     * 输出汉字。遇到不能输出的字符将停止。 
  186.     * 
  187.     * \param img   输出的影象 
  188.     * \param text  文本内容 
  189.     * \param pos   文本位置 
  190.     * \param color 文本颜色 
  191.     * 
  192.     * \return 返回成功输出的字符长度,失败返回-1。 
  193.     */  
  194.    int putText(IplImage *img, const wchar_t *text, CvPoint pos, CvScalar color);  
  195.   
  196.    //================================================================  
  197.    //================================================================  
  198.   
  199. private:  
  200.   
  201.    // 输出当前字符, 更新m_pos位置  
  202.   
  203.    void putWChar(IplImage *img, wchar_t wc, CvPoint &pos, CvScalar color);  
  204.   
  205.    //================================================================  
  206.    //================================================================  
  207.   
  208. private:  
  209.   
  210.    FT_Library   m_library;   // 字库  
  211.    FT_Face      m_face;      // 字体  
  212.   
  213.    //================================================================  
  214.    //================================================================  
  215.   
  216.    // 默认的字体输出参数  
  217.   
  218.    int         m_fontType;  
  219.    CvScalar   m_fontSize;  
  220.    bool      m_fontUnderline;  
  221.    float      m_fontDiaphaneity;  
  222.   
  223.    //================================================================  
  224.    //================================================================  
  225. };  
  226.   
  227. #endif // OPENCV_CVX_TEXT_2007_08_31_H  

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV来实现在图像中写入汉字

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]