https://mangoroom.cn/opencv/opencv-puttext-chinese-characters.html

https://stackoverflow.com/questions/45116828/opencv-cvaddtext-exception-if-no-window

opencv不支持渲染中文字符的原由
opencv不支持渲染中文字符的本质是不支持对utf-8的字符渲染,opencv库中的cv::putText()函数仅支持对ascii码,这是一个很小的字符编码,想要支持中文或者其他字符的渲染就需要支持Unicode的字符集。其实早期的opencv是字符Unicode的字符渲染的,在c语言版本时代采用的是FreeType库实现的,但由于FreeFype是GPL版权发布的库,和OpenCV版权并不一致,因此目前还没有合并到OpenCV

解决方法:

编译opencv的时候,勾选wiht Qt的选项,因为Qt的渲染是支持Unicode字符集的,所以在编译opencv的时候联合编译qt的部分代码可以实现对Unicode的支持。将qt添加到opencv里一起编译本是一件比较麻烦的事,所幸的是opencv官方已经替我们解决了,已经将此选项写在了cmake的构建文件里。所以在编译的时候只需要我们勾选即可。而且在qt的官网可以找到编译教程,教程地址:
https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows。

简单地说,参考教程,只需要在编译opencv的时候,勾选以下两个选项即可

WITH_QT
WITH_OPENGL

Mat img = imread("lena.jpg");
cv::addText(img, "中文测试", cv::Point(100, 50), cv::fontQt("Times"));
imwrite("res.bmp", img);

/home/vitaly/CLionProjects/opencvTest/cmake-build-debug/opencvTest /home/vitaly/Pictures/img.jpg OpenCV Error: Null pointer (NULL guiReceiver (please create a window)) in cvAddText, file /home/vitaly/Documents/opencv/opencv/modules/highgui/src/window_QT.cpp, line 114 terminate called after throwing an instance of 'cv::Exception' what(): /home/vitaly/Documents/opencv/opencv/modules/highgui/src/window_QT.cpp:114: error: (-27) NULL guiReceiver (please create a window) in function cvAddText

which goes away if I add

namedWindow("test", WINDOW_AUTOSIZE);

before addText.

However, I cannot understand why would qt or opencv need an opened window for that ? I don't need to display the image, I'm only using it to put text on image and then save it, I don't want to create any windows.

So here's my questions

  1. Why window is required for that ?
  2. Is there a way around it ? (To not create windows)

As you can see in the source code:

CV_IMPL void cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont* font)
{if (!guiMainThread)CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" );QMetaObject::invokeMethod(guiMainThread,"putText",autoBlockingConnection(),Q_ARG(void*, (void*) img),Q_ARG(QString,QString::fromUtf8(text)),Q_ARG(QPoint, QPoint(org.x,org.y)),Q_ARG(void*,(void*) font));
}

addText requires a gui thread. as the actual drawing happens in that thread. No thread, no function, no drawing...

Why is it like that? Well because it made sense to somebody I guess.

It's open source, feel free to code your own workaround. Otherwise use OpenCV's putText.

opencv putText中文乱码相关推荐

  1. OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题

    OpenCV这么简单为啥不学--1.5.解决putText中文乱码问题 目录 OpenCV这么简单为啥不学--1.5.解决putText中文乱码问题 前言 putText中文乱码问题 putText中 ...

  2. Ubuntu18.04+Qt+Opencv+opencv_contrib 解决putText中文乱码问题

    目录 问题描述: 目的: 配置环境的过程记录: 1 opencv的卸载 1.1 自带的opencv3.3.1卸载方式 1.2 源码安装的opencv卸载方式 2 opencv及opencv_contr ...

  3. Windows10+Qt+Opencv+freetype 解决putText中文乱码问题

    目录 问题描述: 目的: 前提: 配置环境的过程记录: 1. 下载安装cmake.opencv 2. 编译freetype和harfbuzz 2.1 pkg-config 2.2 freetype 2 ...

  4. OpenCV中文路径问题、matplotlib可视化中文乱码问题的解决办法

    OpenCV中文路径问题.matplotlib可视化中文乱码问题的解决办法 OpenCV中文路径问题 读取图片 其中img_path为读取图片路径,可以包含中文 img = cv2.imdecode( ...

  5. opencv保存图片路径包含中文乱码解决方案

    # coding: utf-8 import numpy as np import cv2img = cv2.imread('1.jpg',1) cv2.imshow('image', img)k = ...

  6. python idea控制台中文乱码_python 解决cv2绘制中文乱码问题

    python 解决cv2绘制中文乱码问题 因为使用cv2.putText() 只能显示英文字符,中文会出现乱码问题, 因此使用PIL在图片上绘制添加中文,可以指定字体文件. 大体思路: OpenCV图 ...

  7. OpenCV添加中文(五)

    OpenCV添加文字的方法putText(-),添加英文是没有问题的,但如果你要添加中文就会出现"???"的乱码,需要特殊处理一下. 下文提供封装好的(代码)方法,供OpenCV添 ...

  8. 【图像处理基础知识】python+opencv显示中文

    直接通过cv2.putText()写入的文字只能是英文,虽然opencv以字符串形式接收,但对于中文,会显示问号"???". 找到一个可行的办法,可以应急 封装代码: #codin ...

  9. python 中文乱码_python 解决cv2绘制中文乱码问题

    前几天在公司敲出了个BUG,硬是让我头疼了一阵子,没想到BUG的起因竟是一点小小的细节问题,唉!被折磨的够呛,又让我想起那时候遇到的python cv2绘制中文乱码,差不多也是同样的感受. 为此今天我 ...

最新文章

  1. I/O流的概念和流类库的结构
  2. 《Flume日志收集与MapReduce模式》一2.2 Flume配置文件概览
  3. 基于AI的超分辨技术在RTC领域的技术难点与挑战
  4. linux之sort命令
  5. 大数据和后端学习知识体系思维导图
  6. project 模板_施工进度横道图不会做?18份计划模板收藏好,输入参数迅速成图...
  7. 1.9 编程基础之顺序查找 01 查找特定的值 python AC
  8. 云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件
  9. 杀毒软件可以查杀所有计算机病毒吗,好的杀毒软件可以查杀任何病毒,对还是错?...
  10. mysql创建工作经历表_国内首款 Serverless MySQL 数据库重磅发布!
  11. php100视频教程html,PHP100视频教程48:Ajax+PHP快速上手及应用
  12. android 打印机 万能驱动,打印机驱动,万能打印机驱动下载,驱动程序_万能驱动下载...
  13. 四个vue后台常用模板,你用过几个?
  14. 业余无线电通信_如何办理业余无线电台执照
  15. WM6电话簿转到Android系统
  16. MSSQL父子关系表的SQL查询(SQL Query for Parent Child Relationship)
  17. Python晦涩知识点
  18. 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
  19. Go语言Web项目搭建
  20. pycharm 破解方法

热门文章

  1. mysql 分表 去重统计_MySQL分库分表总结
  2. 解决联想小新电脑无法打开性能模式
  3. wps怎么设置筛选条件
  4. tos win10打开ip_您现在可以在Windows 10上使用iMessage
  5. 微信小程序bindtap普通事件传参方法
  6. Java毕设项目旅行社网站系统(java+VUE+Mybatis+Maven+Mysql)
  7. python3 float转int_dataframe float转int
  8. 博客中添加动漫妹子,总有一个适合你,嘿嘿嘿!
  9. 从零开始搭建一个博客 部署上线 自定义域名 vuepress+github+vercel
  10. java实现打印机源码组装