1. 程式人生 > >OpenCV—圖片寫字(中文和英文)

OpenCV—圖片寫字(中文和英文)

OpenCV在圖片上寫字需要用到兩個函式:

InitFont

void cvInitFont( CvFont* font, int font_face, double hscale,
                 double vscale, double shear=0,
                 int thickness=1, int line_type=8 );
font
被初始化的字型結構體。
font_face
字型名稱識別符號。只是Hershey 字型集( http://sources.isc.org/utils/misc/hershey-font.txt )的一個子集得到支援。
CV_FONT_HERSHEY_SIMPLEX - 正常大小無襯線字型。
CV_FONT_HERSHEY_PLAIN - 小號無襯線字型。
CV_FONT_HERSHEY_DUPLEX - 正常大小無襯線字型。( 比CV_FONT_HERSHEY_SIMPLEX更復雜)
CV_FONT_HERSHEY_COMPLEX - 正常大小有襯線字型。
CV_FONT_HERSHEY_TRIPLEX - 正常大小有襯線字型 ( 比CV_FONT_HERSHEY_COMPLEX更復雜)
CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小譯本。
CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手寫風格字型。
CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更復雜。
這個引數能夠由一個值和可選擇的CV_FONT_ITALIC字型標記合成,就是斜體字。
hscale
字型寬度。如果等於1.0f,字元的寬度是最初的字型寬度。如果等於0.5f,字元的寬度是最初的字型寬度的一半。
vscale
字型高度。如果等於1.0f,字元的高度是最初的字型高度。如果等於0.5f,字元的高度是最初的字型高度的一半。
shear
字型的斜度。當值為0時 ,字元不傾斜;當值為1.0f時,字型傾斜≈45度,等等。厚度讓字母著重顯示。函式cvLine用於繪製字母。
thickness
字型筆劃的粗細程度。
line_type
字型筆劃的型別,參見cvLine。

函式cvInitFont初始化字型結構體,字型結構體可以被傳遞到文字顯示函式中。

cvPutText

cvPutText(CvArr* img, const char* text, CvPoint origin, const CvFont* font, CvScalar color);

img

圖片指標(需要說明的是,CvArr* 等價於void*,一般我們在這裡傳遞一個IplImage*);

text

顯然是需要列印到圖片上的字串的內容;

origin

字串在圖片上列印的原點(即,字串的左下角在圖片中的位置)

font

描述字型屬性的變數;

color

字型的顏色;

寫字效果如下圖所示:


示例程式碼如下所示:

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <ctype.h>
#include <iostream>
using namespace cv;
using namespace std;   
CvFont font;

void main( int argc, char** argv )
{
	Mat src=imread("1.jpg");
	IplImage* image = &IplImage(src); // Mat -> IplImage 型別轉換
	

	/*-------------------opencv寫字程式 8種字型型別------------------*/	
	cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"1Hello World !",cvPoint(80,40),&font,cvScalar(255,0,0,1));
	//cout<<image->height <<"\n "<< image->width ;
	printf("%d\n%d",image->height,image->width);
	cvInitFont(&font,CV_FONT_HERSHEY_PLAIN,1.0,1.0,0,2,8);
	cvPutText(image,"2Hello World !",cvPoint(80, 80),&font,cvScalar(0,255,0,1));

	cvInitFont(&font,CV_FONT_HERSHEY_DUPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"3Hello World !",cvPoint(80, 140),&font,cvScalar(0,255,255,1));

	cvInitFont(&font,CV_FONT_HERSHEY_COMPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"4Hello World !",cvPoint(80, 200),&font,cvScalar(255,255,255,1));

	cvInitFont(&font,CV_FONT_HERSHEY_TRIPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"5Hello World !",cvPoint(80, 260),&font,cvScalar(255,255,0,1));

	cvInitFont(&font,CV_FONT_HERSHEY_COMPLEX_SMALL,1.0,1.0,0,2,8);
	cvPutText(image,"6Hello World !",cvPoint(80, 300),&font,cvScalar(0,0,0,1));

	cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_SIMPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"7Hello World !",cvPoint(80, 360),&font,cvScalar(255,255,255,1));

	cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_COMPLEX,1.0,1.0,0,2,8);
	cvPutText(image,"8Hello World !",cvPoint(80, 420),&font,cvScalar(0,255,255,1));
	/*-------------------opencv寫字程式 8種字型型別------------------*/	


	Mat img(image,TRUE); // IplImageMat -> Mat 型別轉換
	imshow("opencv寫字",img); 
 	waitKey( );
}

寫漢字可參見:http://blog.csdn.net/ubunfans/article/details/45719009