【opencv】opencv在图片、视频嵌中英文字符的方法
??????? 說明:本博文是根據前人已有的成果并結合自己的理解而成的。為了避免讓讀者感到繁瑣,我將運用小學及初中學習的總分總、承上啟下的寫作技巧進行講解,力圖做到詳略有致,言簡意賅,圖文并茂,通俗易懂。
??????? 實驗平臺:VS2010 + opencv2.4.10 (其他版本搭配也是一樣的做法)
????????簡介:在opencv中,不可避免的會遇到在一幅圖像、一段視頻或者實時的監控畫面上嵌入特定的文字來標識,讓人一目了然。那么怎么利用opencv在這些對象上嵌入英文或者是漢字呢?下面切入正題,就嵌入英文和中文字符2個部分,分別做闡述。
??????? 一、嵌入英文字符(opencv自帶函數)
??????? 這一部分比較簡單,利用opencv自帶的cvInitFont()和cvPutText()函數就可以了。【具體使用方法請百度,這里不做詳細說明】
?????? 直接放上演示代碼和效果圖。
demo1源碼:
#include<iostream> #include<opencv2/highgui/highgui.hpp>using namespace cv;int main(void) {IplImage *img = cvLoadImage("wall.jpg");CvFont font;cvInitFont(&font, CV_FONT_HERSHEY_DUPLEX, 1, 1, 0, 2, 4);cvPutText(img, "This is demo 1.", cvPoint(200, 65), &font, CV_RGB(255, 0, 0));cvPutText(img, "http://blog.csdn.net/hujingshuang", cvPoint(20, 125), &font, CV_RGB(255, 0, 0));cvNamedWindow("demo1:圖片嵌入字符", CV_WINDOW_AUTOSIZE);cvShowImage("demo1:圖片嵌入字符", img);cvWaitKey(0);cvDestroyWindow("demo1:圖片嵌入字符");return 0; }demo1效果圖:????????????????????????????????????? ????????????.?????
????????二、嵌入中文字符(FreeType)
???????????????這一部分比較麻煩,但只需按照下面的步驟一步一步來就行,為方便敘述,我以自己的opencv安裝目錄為例(D:\opencv),請讀者根據自己的目錄操作。
????????????? 1、首先,下載兩個文件。
?????????????????????①FreeType(版本隨意):我用的是freetype-2.5.5,下載地址:http://sourceforge.net/projects/freetype/files/freetype2/
?????????????????????②simhei.ttf字體工具:如果你的C:\Windows\Fonts\目錄下有,就不用下載。【一般情況下都有】
??????????????2、其次,需要兩個lib庫支持。即:freetype255.lib與freetype255d.lib,需要由自己編譯得到。用vs2010打開..\freetype-2.5.5\builds\windows\vc2010\freetype.sln解決方案(與vs版本對應),在Debug模式下按F5編譯,待編譯完畢;再切到Release模式下F5,如果編譯中出現錯誤,不要理會。此時在目錄freetype-2.5.5\objs\vc2010\Win32下已生成了兩個lib,將其復制到D:\opencv\build\x86\vc10\lib文件夾下。
????????????? 3、在D:\opencv\build\include下新建文件夾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:\opencv\build\x86\vc10\lib
??????????????????????????????????????????????????????????????????????????????.???
????????????????? 在Linker—>Input中增加依賴項:freetype255d.lib、freetype255.lib
.???這樣配置就完成了,接下來就是代碼和效果圖:
demo2源碼:
#include<iostream> #include<stdlib.h> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv/CvxText.h>int main(void) {IplImage *img = cvLoadImage("wall.jpg");CvxText text("C:\\WINDOWS\\Fonts\\simhei.ttf");//此目錄下有很多tff格式文件,有興趣可一一實驗,選擇最喜歡的字體。float p = 1;text.setFont(NULL, NULL, NULL, &p); // 透明處理text.putText(img, "demo2:圖片嵌入中文字符", cvPoint(180, 65), CV_RGB(0,0,255));text.putText(img, "參見博客:http://blog.csdn.net/hujingshuang", cvPoint(120, 110), CV_RGB(0,0,255));cvNamedWindow("demo2:圖片嵌入中文字符", CV_WINDOW_AUTOSIZE);cvShowImage("demo2:圖片嵌入中文字符", img);cvWaitKey(0);cvDestroyWindow("demo2:圖片嵌入中文字符");return 0; }demo2效果圖:???????????????????????????????????????????????????? .???
??????? 至此,利用opencv在圖像中嵌入中英文字符已講解完畢。由此及彼,便可在視頻中嵌入感興趣的字符。源碼及所有需要的文件都已打包上傳,詳情下載附件:http://download.csdn.net/detail/hujingshuang/8394121
??????? 若有疑問,可在博客評論回復,或將問題圖文并茂的郵件給筆者(cuit_hjs@163.com),知識有限,但盡量答復。
??????????? 特別注意:
??????????????????????????1、本博客例程僅做學習交流用,切勿用于商業用途。
????????????????????????? 2、歡迎交流,轉載請注明出處:http://blog.csdn.net/hujingshuang/article/details/43112237
轉載于:https://www.cnblogs.com/hujingshuang/p/5119015.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的【opencv】opencv在图片、视频嵌中英文字符的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UITableViewControlle
- 下一篇: 【WP8.1开发】RenderTarge