如何用Pangolin显示文本字符串,画文本点云

本文介绍如何在Pangolin三维显示工具中利用OpenCV的文本功能来实现汉字文本的三维显示。通过cv::putText获取二维文本坐标并转换为三维坐标,然后使用Pangolin进行绘制。同时,提到了Pangolin的内置GlFont类,可以方便地加载字体文件并直接在三维空间中显示文本,且文字会随视角变化而正对观察者。
摘要由CSDN通过智能技术生成

目录

我以为:

事实上:


Pangolin是个非常好用的三维显示工具,但是唯独没有发现有提供文本显示的方法!!

是有的,是我唐突了

我以为:

效果图如下:

主要原理是借助OpenCV的文本显示,但是OpenCV不支持汉字,百度以下就能找到方法,这里不做说明。

具体步骤是首先通过cv::putText()获取二维文本坐标,再根据需要设定缩放系数,指定第三维度坐标。

代码如下:

input:要显示的字符串

return: 采样后字符的三维坐标集合

vector<cv::Mat> textToPoints(string text)
{
    // string text = "box";
    //int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;     //手写风格字体
    int fontFace = 0;
    double fontScale = 1;       //字体缩放比
    int thickness = 1;
    int baseline = 0;

    cv::Size textSize = cv::getTextSize(text, fontFace, fontScale, thickness, &baseline);
    baseline += thickness;

    cv::Mat img(textSize.height+5,100,CV_8UC1, cv::Scalar::all(0));

    //pos the text
    cv::Point textOrg(0, textSize.height);

    cv::line(img,textOrg + cv::Point(0,thickness),textOrg + cv::Point(textSize.width,thickness),cv::Scalar(0,0,255));

    cv::putText(img,text,textOrg,fontFace,fontScale,cv::Scalar::all(255),thickness,8);
    cv::imshow("text",img);
    // cv::waitKey(1);

    vector<cv::Mat> txtPoints;
    for(int i=0,iend=img.rows;i<iend;i++)
    {
        for(int j=0,jend=img.cols;j<jend;j++)
        {
            if((int)img.at<uchar>(i,j)==255)
            {
                cv::Mat pos=(cv::Mat_<float>(3,1)<<i,0,j);
                txtPoints.push_back(pos);
            }
        }
    }

    return txtPoints;//你可以用Pangolin把点画出来
    
}

事实上:

class PANGOLIN_EXPORT GlFont
{
public:
    // Singleton instance if requested.
    static GlFont& I();

    // Load GL Font data. Delay uploading as texture until first use.
    GlFont(const unsigned char* ttf_buffer, float pixel_height, int tex_w=512, int tex_h=512);
    GlFont(const std::string& filename, float pixel_height, int tex_w=512, int tex_h=512);

    virtual ~GlFont();

    // Generate renderable GlText object from this font.
    GlText Text( const char* fmt, ... );

    GlText Text( const std::string& str );

    inline float Height() const {
        return font_height_px;
}

两种构造方法,以第二种为例:

pangolin::GlFont *text_font = new pangolin::GlFont("/home/user/Third_lib/font/Anonymous-Pro-Bold.ttf", 15.0); //需要先去网上下载字体
text_font->Text("text").Draw(0.0, 0.0, 0.0);//参数为xyz坐标

效果如下:

 而且会一直跟随,正对视角!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值