首页 > 解决方案 > 使用 putText 和 FreeFontStyle 在 opencv 中绘制希腊符号

问题描述

我在 Python 语言中看到了以下关于如何编写putTextOpencv 函数中使用的 Hershey 字体样式不支持的特殊字符的问题:如何在控制台中编写俄语字母如何在图像如何在控制台中写希腊字母

我想使用 UTF-8 字符串和freetype2类使用putText. 第二个链接是我想要的,但我看到它也使用了 PIL 选项,但我没有使用 Python。谢谢!

标签: c++opencvunicodespecial-charactersfreetype

解决方案


正如@berak 在这个答案中提到的,这是不可能的putText()。它只支持 ascii 子集。

但是如果你安装了 opencv,你可以使用addText()来实现它-D WITH_QT = ON

这是带有希腊字母和结果的简单代码:

在此处输入图像描述

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
    Mat img = Mat::zeros(Size(1000,1000),CV_8UC3);


    namedWindow("Window",0);
    cv::addText(img, "Greek Letters: ", cv::Point(50, 100), "Times",30,Scalar(0,255,255),QT_FONT_NORMAL,QT_STYLE_NORMAL);
    cv::addText(img, "alpha: α", cv::Point(50, 200), "Times",30,Scalar(0,255,255),QT_FONT_NORMAL,QT_STYLE_NORMAL);
    cv::addText(img, "betta: β", cv::Point(50, 300), "Times",30,Scalar(0,255,255),QT_FONT_NORMAL,QT_STYLE_NORMAL);
    cv::addText(img, "gamma: γ", cv::Point(50, 400), "Times",30,Scalar(0,255,255),QT_FONT_NORMAL,QT_STYLE_NORMAL);
    cv::addText(img, "delta: δ", cv::Point(50, 500), "Times",30,Scalar(0,255,255),QT_FONT_NORMAL,QT_STYLE_NORMAL);
    cv::addText(img, "epsilon: ε", cv::Point(50, 600), "Times",30,Scalar(0,255,255),QT_FONT_BOLD,QT_STYLE_NORMAL);


    imshow("Window",img);

    waitKey(0);

    return 0;
}

推荐阅读