用opencv将文字生成图,但不能是中文,中文输出要用到freetype
Mat dstImage=Mat::zeros(300,400,CV_8UC3);
String text="opencv生成的图片";
putText(dstImage,text,Point(100,200),FONT_HERSHEY_SIMPLEX,1,Scalar::all(255));
imwrite("testopencv.jpg", dstImage);
qt的代码如下:
QString tempImagePath="test.bmp";
//图片上的字符串
QString imageText = QStringLiteral("hello123456这是qt生成的一张图片abc");
QFont font;
//设置显示字体的大小
font.setPixelSize(30);
QFontMetrics fm(font);
int charWidth = fm.width(imageText);
charWidth = fm.boundingRect(imageText).width();
//指定图片大小为字体的大小
QSize size(charWidth+8, 30);
//以ARGB32格式构造一个QImage
QImage image(size, QImage::Format_ARGB32);
//填充图片背景
image.fill(qRgba(0, 0, 0, 0));
//为这个QImage构造一个QPainter
QPainter painter(&image);
//设置画刷的组合模式CompositionMode_SourceOut这个模式为目标图像在上。
//改变组合模式和上面的填充方式可以画出透明的图片。
painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
//改变画笔和字体
QPen pen = painter.pen();
pen.setColor( QColor(255, 255, 255));
painter.setPen(pen);
painter.setFont(font);
//在Image的中心
painter.drawText(image.rect(), Qt::AlignCenter, imageText);
image.save(tempImagePath, "BMP", 100);
注意中文要用QStringLiteral,不然会是乱码