#include "opencv2/opencv.hpp"
#include "opencv2/freetype.hpp"
static cv::Ptr<cv::freetype::FreeType2> getFreeType()
{
static cv::Ptr<cv::freetype::FreeType2> ft2;
if (ft2.empty())
{
ft2 = cv::freetype::createFreeType2();
ft2->loadFontData("simhei.ttf", 0);
}
return ft2;
}
void test_freetype()
{
cv::Mat frame(256, 256, CV_8UC3, cv::Scalar::all(0));
static cv::String text = "AIS开启中,请稍后……";
int baseline = 0;
cv::Size textSize = getFreeType()->getTextSize(text,
30, //fontHeight
-1, //thickness
&baseline);
// center the text
cv::Point textOrg((frame.cols - textSize.width) / 2, textSize.height * 2);
// then put the text itself
getFreeType()->putText(frame, text, textOrg, 30, cv::Scalar(0, 0, 255), -1, 4, true); //linestyle= 4
cv::imwrite("freetype.jpg",frame);
}
/** @brief Draws a text string.
The function putText renders the specified text string in the image. Symbols that cannot be rendered using the specified font are replaced by “Tofu” or non-drawn.
@param img Image.
@param text Text string to be drawn.
@param org Bottom-left/Top-left corner of the text string in the image.
@param fontHeight Drawing font size by pixel unit.
@param color Text color.
@param thickness Thickness of the lines used to draw a text when negative, the glyph is filled. Otherwise, the glyph is drawn with this thickness.
@param line_type Line type. See the line for details.
@param bottomLeftOrigin When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.
*/
CV_WRAP virtual void putText(
InputOutputArray img, const String& text, Point org,
int fontHeight, Scalar color,
int thickness, int line_type, bool bottomLeftOrigin
) = 0;
参考文章:
关于OpenCV无法putText汉字的坑