opencv在一个图片中显示任何你想表达的内容

来源:互联网 发布:unity3d 支持的模型 编辑:程序博客网 时间:2024/06/16 05:50
想要在一幅图片中表达任何你想表达的内容,只需调用cvPutText()函数即可。该函数的申明如下所示:

cvPutText(CvArr* img, const char* text, CvPoint origin, const CvFont* font, CvScalar color);函数中各个参数的含义如下所示:

img---图片指针(需要说明的是,CvArr* 等价于void*,一般我们在这里传递一个IplImage*)

text---显然是需要打印到图片上的字符串的内容;

origin---字符串在图片上打印的原点(即,字符串的左下角在图片中的位置)

font---描述字体属性的变量;

color---字体的颜色;

上面函数中出现了一个较为生僻的变量CvFont*,从名称不难发现,该类型用于进行字符属性的描述;需要刻意提醒的是,CvFont类型的指针并不能像CvMatIplImage类型的指针那样,存在一个cvCreate**之类的函数对其进行初始化。CvFont类型变量的初始化是通过函数cvInitFont来实现的;该函数的申明如下所示:

void cvInitFont(CvFont* font, int font_face, double h_scale, double v_scale, double shear=0, int thickness=1, int line_type=8);

该函数中各个变量的含义如下所示:

font---传入及传出的字体属性类型指针;

font_face---表示字体的类型,其取值只能为以下数值之一:

1. CV_FONT_HERSHEY_SIMPLEX

2. CV_FONT_HERSHEY_PLAIN

3. CV_FONT_HERSHEY_DUPLEX

4. CV_FONT_HERSHEY_COMPLEX

5. CV_FONT_HERSHEY_TRIPLEX

6. CV_FONT_HERSHEY_COMPLEX_SMALL

7. CV_FONT_HERSHEY_SCRIPT_SIMPLEX

8. CV_FONT_HERSHEY_SCRIPT_COMPLEX

h_scale---只能为10.5,表示水平方向字体的缩放系数;

v_scale---只能为10.5,表示垂直方向字体的缩放系数;

shear---取值从0---1,表示字体的倾斜程度,0表示不倾斜,1表示倾斜45度;

thichness, line_type这两个参数同OpenCV的其它绘图函数中定义的一样,表示线型的宽度和线条的类型;


代码如下:

#include <cv.h>
#include <highgui.h>

using namespace cv;
using namespace std;

void main()
{
cvNamedWindow("img", 0);
IplImage *img=cvLoadImage("f.jpg",1);
if (!img)
{
cout<<"img load error..."<<endl;
exit(-1);
}

CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1, 1, 1, 2, 8);
cvPutText(img, "I love you,my girl!", cvPoint(5, 200), &font, CV_RGB(255,0,0));

cvShowImage("img",img);
cvSaveImage("img.jpg",img);

cvWaitKey(0);
cvReleaseImage(&img); 
cvDestroyAllWindows(); 
}


效果:



0 0