【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM