31_OpenCV中关于文字的操作

本文主要是关于绘制文本以及获取文字字体大小的说明。

1. 绘制文本 cv::putText()

cv::putText()是OpenCV中的一个主要文字绘制的方法,可以简单地在图像上绘制一些文字。函数声明:

void cv::putText(
	cv::Mat& img,  // image to be drawn on
	const string& text,  // write this (often from cv::format)
	cv::Point origin,  // upper-left corner of text box
	int fontFace,  // font,e.r., cv::FONT_HERSHEY_PLAIN
	double fontScale,  // size (a multiplier,not points!
	cv::Scalar color,  // color,BGR form
	int thickness = 1, // thickness of line
	int lineType = 8,  // connectedness, 4 or 8
	bool bottomLeftOrigin = false  // true = origin at lower left
);

函数说明:由text指定的文字将在以左上角为原点的文字框中以color指定的颜色绘制出来,除非bottomLeftOrigin标志被设置为真,这种情况下文字框将以左下角为原点。使用的字体由fontFace参数据决定,可取的值如下表:

标识符 描述
cv::FONT_HERSHEY_SIMPLEX 普通大小无衬线字体
cv::FONT_HERSHEY_PLAIN 小号无衬线字体
cv::FONT_HERSHEY_DUPLEX 普通大小无衬线字体,比cv::FONT_HERSHEY_SIMPLE更复杂
cv::FONT_HERSHEY_COMPLEX 普通大小无衬线字体,比cv::FONT_HERSHEY_DUPLEX更复杂
cv::FONT_HERSHEY_TRIPLEX 普通大小无衬线字体,比cv::FONT_HERSHEY_COMPLEX更复杂
cv::FONT_HERSHEY_COMPLEX_SMALL 小号版本的cv::FONT_HERSHEY_COMPLEX
cv::FONT_HERSHEY_SCRIPT_SIMPLE 手写字体
cv::FONT_HERSHEY_SCRIPT_COMPLEX 比cv::FONT_HERSHEY_SCRIPT_SIMPLEX更复杂的变体

上表中的字体都可以和cv::FONT_HERSHEY_ITALIC组合使用(通过或操作)来得到斜体。每种字体都有一个自然大小,当fontScale不是1.0时,在文字绘制之前字体大小将由这个数缩放。

2. 获取文字大小 cv::getTextSize()

cv::getTextSize()回答了如果把文字绘制出来将有多大的问题,不用实际将文字绘制到图上。cv::getTextSize的新参数是baseLine,是一个输出参数,baseLine是和文字最低点相关的文字基线的y坐标值。函数声明如下:

cv::Size cv::getTextSize(
	const string& text,
	cv::Point origin,
	int fontFace,
	double fontScale,
	int thickness,
	int* baseLine
);

上面两个函数使用示例:

	cv::Mat image(400, 1100, CV_8UC3, cv::Scalar(128,128, 128));
	int ny,nHeight;
	ny = 35;
	std::string text = "cv::FONT_HERSHEY_SIMPLEX";
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_SIMPLEX,1.0, CV_RGB(255, 255, 0),1);
	cv::getTextSize(text, cv::FONT_HERSHEY_SIMPLEX, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_PLAIN";
	ny += nHeight+10;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_PLAIN, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_PLAIN, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_DUPLEX";
	ny += nHeight+nHeight*4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_DUPLEX, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_DUPLEX, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_COMPLEX";
	ny += nHeight + nHeight * 4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_COMPLEX, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_COMPLEX, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_TRIPLEX";
	ny += nHeight + nHeight * 4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_TRIPLEX, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_TRIPLEX, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_COMPLEX_SMALL small version cv::FONT_HERSHEY_COMPLEX";
	ny += nHeight + nHeight * 4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_COMPLEX_SMALL, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_COMPLEX_SMALL, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_SCRIPT_SIMPLEX";
	ny += nHeight + nHeight * 4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, 1, &nHeight);

	text = "cv::FONT_HERSHEY_SCRIPT_COMPLEX";
	ny += nHeight + nHeight * 4;
	cv::putText(image, text, cv::Point(10, ny), cv::FONT_HERSHEY_SCRIPT_COMPLEX, 1.0, CV_RGB(255, 255, 0), 1);
	cv::getTextSize(text, cv::FONT_HERSHEY_SCRIPT_COMPLEX, 1.0, 1, &nHeight);

	cv::namedWindow("image", cv::WINDOW_AUTOSIZE);
	cv::imshow("image", image);
	cv::waitKey(0);
	cv::destroyAllWindows();

显示结果:

31_OpenCV中关于文字的操作_第1张图片

 

你可能感兴趣的:(openCv,opencv)