互联网@时事传播程序猿学习学习

【图像处理】OpenCV系列三十一 --- getFontSca

2019-05-14  本文已影响98人  307656af5a04

上一节我们学习了积分图(integral)相关的知识点,相信大家学习之后,对积分图已经有了基本的认识,从现在,我们开始了一个新的知识点,就是如何运用openCV中的绘制函数,本节呢,我们学习如何绘制一个带箭头的直线。

一、getFontScaleFromHeight()函数详解

1、函数原型

double getFontScaleFromHeight(
    const int fontFace,
    const int pixelHeight,
    const int thickness = 1);

2、函数功能
计算用于给定高度的特定字体大小(以像素为单位);

3、参数详解

具体的字体类型有以下几种:
(1) FONT_HERSHEY_SIMPLEX,普通尺寸无衬线字体;
(2) FONT_HERSHEY_PLAIN, 小尺寸无衬线字体;
(3) FONT_HERSHEY_DUPLEX,普通尺寸无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂;
(4) FONT_HERSHEY_COMPLEX,正常大小衬线字体;
(5) FONT_HERSHEY_TRIPLEX,正常大小衬线字体,比 FONT_HERSHEY_COMPLEX更复杂;
(6) FONT_HERSHEY_COMPLEX_SMALL,FONT_HERSHEY_COMPLEX的缩小版本;
(7) FONT_HERSHEY_SCRIPT_SIMPLEX,手写字体;
(8) FONT_HERSHEY_SCRIPT_COMPLEX,FONT_HERSHEY_SCRIPT_SIMPLEX更复杂的变体;
(9) FONT_ITALIC,斜体标志;

二、getTextSize()函数详解

1、函数原型

Size getTextSize(
    const String& text, 
    int fontFace,
    double fontScale, 
    int thickness,
    CV_OUT int* baseLine);

2、函数功能
计算文本字符串的宽度和高度;

3、参数详解

三、putText()函数详解

1、函数原型

void putText(InputOutputArray img, 
    const String& text, 
    Point org,
    int fontFace, 
    double fontScale, 
    Scalar color,
    int thickness = 1, 
    int lineType = LINE_8,
    bool bottomLeftOrigin = false);

2、函数功能
将文本字符串绘制到图像指定的位置上;

3、参数详解

四、综合实例

1、实验实例

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main()
{   
    int i = 0;
    
    // 循环显示几种不同的字体
    while(i<=8)
    {
        // 需要图片上显示的字体
        String text = "Funny text";

        // 字体的类型
        int fontFace = i;
        
        // 如果循环到了最后一个字体,则重新开始循环
        if(i==8)
        {
            fontFace = 16;
            i=-1;
        }
        
        // 计算字体的大小
        double tmp = getFontScaleFromHeight(fontFace,10);

        // 字体的缩放系数
        double fontScale = 2;

        // 字体的粗细
        int thickness = 3;

        // 待显示字符串的图像
        Mat img(600, 800, CV_8UC3, Scalar::all(0));

        // 定义基线
        int baseline=0;

        // 获取字符串的大小
        Size textSize = getTextSize(text, fontFace,
                        fontScale, thickness, &baseline);
                                    
        baseline += thickness;

        // 中心
        Point textOrg((img.cols - textSize.width)/2,
                      (img.rows + textSize.height)/2);
                      
        // 绘制矩形
        rectangle(img, textOrg + Point(0, baseline),
                  textOrg + Point(textSize.width, -textSize.height),
                  Scalar(0,0,255));
                  
        // 字体下划线
        line(img, textOrg + Point(0, thickness),
             textOrg + Point(textSize.width, thickness),
             Scalar(0, 0, 255));
             
        // 将字符串绘制到图像上
        putText(img, text, textOrg, fontFace, fontScale,
                Scalar::all(255), thickness, 8);
            
        imshow("dst",img);
        waitKey(100);
        i++;
    }
    return 0;
}

2、实验结果

字体的类型 字体的类型 字体的类型 字体的类型 字体的类型

我是奕双,现在已经毕业将近两年了,从大学开始学编程,期间学习了C语言编程,C++语言编程,Win32编程,MFC编程,毕业之后进入一家图像处理相关领域的公司,掌握了用OpenCV对图像进行处理,如果大家对相关领域感兴趣的话,可以关注我,我这边会为大家进行解答哦!如果大家需要相关学习资料的话,可以私聊我哦!

上一篇下一篇

猜你喜欢

热点阅读