当前位置: 首页 > news >正文

在Qt中解决opencv的putText函数无法绘制中文的一种解决方法

文章目录

  • 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()支持中文了?!】

http://www.lryc.cn/news/215866.html

相关文章:

  • 【Linux】第六站:Centos系统如何安装软件?
  • Istio 实战
  • 【Midjourney入门教程4】与AI对话,写好prompt的必会方法
  • 基于单片机的智能灭火小车设计
  • [Machine Learning][Part 7]神经网络的基本组成结构
  • 精准测试:提高软件质量和用户满意度的利器
  • 代碼隨想錄算法訓練營|第五十八天|583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇。刷题心得(c++)
  • JavaScript基础之BOM与DOM
  • 【Linux学习笔记】进程概念(中)
  • scanpy赋值问题
  • 腾讯云域名备案后,如何解析到华为云服务器Linux宝塔面板
  • odoo 按钮打印pdf报表
  • 用逻辑分析仪观察串口Uart数据波形
  • 数据结构-栈应用括号匹配
  • leetcode做题笔记209. 长度最小的子数组
  • 【机器学习】几种常用的机器学习调参方法
  • 使用免费 FlaskAPI 部署 YOLOv8
  • 不使用屏幕在树莓派4B安装Ubuntu22.04桌面版(64位)
  • Pymysql模块使用操作
  • 8+双疾病+WGCNA+多机器学习筛选疾病的共同靶点并验证表达
  • springboot如何获取前端请求头的值并加入ThreadLocal
  • 程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!
  • 前端食堂技术周刊第 102 期:Next.js 14、Yarn 4.0、State of HTML、SEO 从 0 到 1
  • GPT与人类共生:解析AI助手的兴起
  • HTML脚本、字符实体、URL
  • UOS安装Jenkins
  • 纯CSS实现卡片上绘制透明圆孔
  • 用前端框架Bootstrap的AdminLTE模板和Django实现后台首页的页面
  • Linux驱动 编译乱序和执行乱序
  • 京东大数据平台(京东数据分析):9月京东牛奶乳品排行榜