博客
关于我
opencv putText中文乱码
阅读量:792 次
发布时间:2023-02-23

本文共 774 字,大约阅读时间需要 2 分钟。

OpenCV默认不支持渲染中文字符,因为其cv::putText()函数仅支持ASCII字符。要支持中文字符渲染,需要依赖于支持UTF-8编码的库,如Qt。以下是解决该问题的详细步骤:

  • 编译OpenCV时选择WITH_QT选项

    • 在CMake配置中启用WITH_QT和WITH_OPENGL选项。这会集成OpenCV与Qt库,支持Unicode字符渲染。
  • 使用cv::addText()函数

    • 在编译完成后,可以使用cv::addText()方法来在图像上添加中文字符。例如:
      Mat img = imread("lena.jpg");cv::addText(img, "中文测试", cv::Point(100, 50), cv::fontQt("Times"));imwrite("res.bmp", img);
  • 处理窗口问题

    • 如果在没有创建窗口的情况下调用cv::addText(),可能会遇到错误。为避免此问题,可以在程序开始时创建一个隐藏窗口:
      namedWindow("test", WINDOW_AUTOSIZE);
    • 这个窗口不会显示在屏幕上,但确保了Gui主线程的存在,从而允许cv::addText()正常工作。
  • 理解渲染机制

    • OpenCV基于Qt进行GUI渲染,因此需要Gui主线程来执行绘图操作。这是为了确保跨平台的兼容性和稳定性。
    • 即使只需要在后台处理图像,OpenCV依然需要一个有效的Gui主线程来支持渲染功能。
  • 优化和调试

    • 确保所有依赖的库(包括Qt和OpenCV)都已正确编译和链接。
    • 检查程序输出,确保没有错误信息,并确认生成的图像包含预期的中文字符。
  • 通过以上步骤,可以成功在OpenCV中渲染中文字符。虽然这要求编译时选择特定选项,并且可能需要处理窗口的创建,但这是实现支持UTF-8字符渲染的常规方法。

    转载地址:http://zlsfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现随机正态分布快速排序算法(附完整源码)
    查看>>
    Objective-C实现随机生成一个 RxC 列联表(附完整源码)
    查看>>
    Objective-C实现隐藏任务栏(附完整源码)
    查看>>
    Objective-C实现隔离数字的小数部分, 取这个数字并从底数中减去它,返回结果算法(附完整源码)
    查看>>
    Objective-C实现雅可比迭代法算法(附完整源码)
    查看>>
    Objective-C实现雪花算法(附完整源码)
    查看>>
    Objective-C实现雪花飘落效果(附完整源码)
    查看>>
    Objective-C实现霍夫曼树(附完整源码)
    查看>>
    Objective-C实现霍纳法则(附完整源码)
    查看>>
    Objective-C实现非丰富数之和算法(附完整源码)
    查看>>
    Objective-C实现非并行奇偶转置排序算法(附完整源码)
    查看>>
    Objective-C实现香农编码(附完整源码)
    查看>>
    Objective-C实现马氏距离算法(附完整源码)
    查看>>
    Objective-C实现骑士旅游算法(附完整源码)
    查看>>
    Objective-C实现骑士旅游算法(附完整源码)
    查看>>
    Objective-C实现高斯-赛德尔迭代算法(附完整算法)
    查看>>
    Objective-C实现高斯消元法(附完整源码)
    查看>>
    Objective-C实现高斯消元法(附完整源码)
    查看>>
    Objective-C实现高斯消元算法(附完整源码)
    查看>>
    Objective-C实现高斯消去法(附完整源码)
    查看>>