参考OpenCV绘图之字体和文字 - 云+社区 - 腾讯云
在OpenCV中输出文本是比较方便吧,有一个问题就是获取字体有那么一点麻烦,需要调用函数来实现其赋值,作为字体参数,而输出文本只需要设置字体,文本输出位置,文本的颜色,文本字符串,显示文本的图像这几个参数.
下面说一下输出文本的函数:
void cvPutText{
CvArr * img,
const char* text,
CvPoint origin,
const CvFont * font,
CvScalar color
};
const CvFont * font 参数是通过cvInitFont()函数来实现的.
下面是cvInitFont函数的原型声明:
CvFont * cvInitFont(
CvFont * font,
int font_face,
double hscale,
double vscale,
int thickness = 1,
int line_type = 8
);
关于font_face参数:
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 字体标记合成。就是斜体字.
参数vscale,和hscale分别表示行高、和字体宽度,当其值被设为1.0时,就为默认值,当其值被设为0.5时,就为原默认值的一半,shear参数表示字体的倾斜程度,当其值为0时,表示字体不倾斜,当其值为1时,文字倾斜45度.
下面是使用函数的一个实例:
/* OpenCV之显示文本函数的应用实例 */
#include
#include
int main()
{
/* 创建一个空图 */
CvSize size = cvSize(400, 400);
IplImage * testImage = cvCreateImage(size, IPL_DEPTH_8U, 3);
/* 对图像数据域的矩阵进行赋值得到一副空白图 */
for(int y = 0; y < testImage->height; y++){
unsigned char * Pout = (unsigned char *)(testImage->imageData + y * testImage->widthStep);
for(int x = 0; x < testImage->width; x++){
Pout[3 * x + 0] = 255;
Pout[3 * x + 1] = 255;/* 使图像呈现白色 */
Pout[3 * x + 2] = 255;
}
}
/* 定义要显示的内容 */
char * text = new char[20];
text = "Hello, world";/* 文本字符串1*/
char * text_last = new char[60];
text_last = "Copyright @3blog.csdn.net/yinkailin. All Rights Reserved.";/* 文本字符串2 */
/* 定义要显示文字的位置、颜色和字体 */
CvPoint point1 = cvPoint(50, 50);
CvPoint point2 = cvPoint(80, 80);/* 设置字体在图片中出现的位置 */
CvPoint point3 = cvPoint(110, 110);
CvPoint point4 = cvPoint(10, 370);
CvScalar color = cvScalar(10, 10, 210);/* 设置字体的颜色 */
CvFont font1, font2, font3, font4;/* 定义一些设置字体的变量 */
/* 使用cvInitFont函数为上述结构体赋值 */
cvInitFont(&font1, CV_FONT_HERSHEY_SCRIPT_SIMPLEX, 0.5, 1.0, 0);
cvInitFont(&font2, CV_FONT_HERSHEY_COMPLEX, 0.5, 1.0, 0);
cvInitFont(&font3, CV_FONT_HERSHEY_SIMPLEX, 0.5, 1.0, 0);
cvInitFont(&font4, CV_FONT_HERSHEY_SCRIPT_COMPLEX, 0.5, 1.0, 0);
cvPutText(testImage, text, point1, &font1, color);
cvPutText(testImage, text, point2, &font2, color);
cvPutText(testImage, text, point3, &font3, color);/* 将相应格式的字体显示在图片相应的位置 */
cvPutText(testImage, text_last, point4, &font4, color);
cvNamedWindow("PutText");
cvShowImage("PutText", testImage);/* 创建图片并显示文本 */
cvWaitKey(0);
/* 释放相关资源 */
cvReleaseImage(&testImage);
cvDestroyAllWindows();
return 0;
}
程序的运行结果如下: