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