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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值