已解决
在Qt中解决opencv的putText函数无法绘制中文的一种解决方法
来自网友在路上 172872提问 提问时间:2023-11-07 14:11:35阅读次数: 72
最佳答案 问答题库728位专家为你答疑解惑
文章目录
- 1.问题
- 2.查阅资料
- 3.解决办法
1.问题
在opencv中,假如直接使用putText绘制中文,会在图像上出现问号,如下图所示:
2.查阅资料
查了一些资料,说想要解决这个问题,需要用到freetype库或者用opencv5(详情请查看文末的参考资料)。但是我现在用的是opencv4,freetype库已经被移到opencv_contrib去了,用起来麻烦,而且用freetype的话,其实也是相当于用了第三方库来实现:
...cv::Ptr<cv::freetype::FreeType2> ft2;ft2=cv::freetype::createFreeType2();
...// then put the text itselfft2->putText(img, text, textOrg, fontHeight,cv::Scalar(255,0,0), thickness, linestyle, true );
那我Qt也是第三方库啊,还倒不如直接用Qt实现呢。
3.解决办法
于是,我实现了一个myPutText函数
int myPutText(cv::Mat &img, QString text, QPoint org, QFont font, QPen pen)
{QImage::Format imgFormat;switch (img.channels()) {case 1:imgFormat = QImage::Format_Grayscale8;break;case 3:imgFormat = QImage::Format_RGB888; // 没有BGR格式,因此要注意一下pen的colorbreak;default:return -1;break;}// 直接共享了Mat的内存,不存在内存复制。所以应该不怎么耗时QImage tmpImg(img.data, img.cols, img.rows, img.step, imgFormat);QPainter painter(&tmpImg);painter.setPen(pen);painter.setFont(font);painter.drawText(org, text);return 0;
}
用法如下:
cv::Mat img = cv::imread("4.bmp", cv::IMREAD_COLOR);cv::resize(img, img, cv::Size(640, 480));QString tempText = "中文";QPen pen;pen.setColor(QColor(0, 255, 0));QFont font;font.setPixelSize(32);myPutText(img, tempText, QPoint(100, 100), font, pen);// cv::putText(img, tempText.toStdString(), cv::Point(100, 100), cv::FONT_HERSHEY_TRIPLEX, 1.0, cv::Scalar(255, 255, 0));cv::imshow("img", img);
效果如下:
参考资料
【关于OpenCV无法putText汉字的坑】
【听说putText()支持中文了?!】
查看全文
99%的人还看了
相似问题
- 黄金比例设计软件Goldie App mac中文版介绍
- 多协议数据库管理软件 Navicat Premium 16 mac中文版功能
- 媒体格式转换软件Permute 3 mac中文版软件特点
- 图片降噪软件 Topaz DeNoise AI mac中文版功能
- 图数据库Neo4J 中文分词查询及全文检索(建立全文索引)
- 打印工具HandyPrint Pro Mac中文版软件特点
- Android开发:(AndroidStudio模拟器)如何将模拟器语言设置为中文 模拟器输入法更改为中文输入 键盘输入中文
- kali中文输入法
- 文件传输客户端 SecureFX mac中文版支持多种协议
- linux 安装中文字体
猜你感兴趣
版权申明
本文"在Qt中解决opencv的putText函数无法绘制中文的一种解决方法":http://eshow365.cn/6-34541-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 网页视频录制技巧,解锁录制新体验
- 下一篇: Flutter 06 动画