OpenCV—圖片寫字(中文和英文)
阿新 • • 發佈:2019-01-23
OpenCV在圖片上寫字需要用到兩個函式:
寫漢字可參見:http://blog.csdn.net/ubunfans/article/details/45719009
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