精华内容
下载资源
问答
  • opencv 显示中文字体

    千次阅读 2020-03-17 15:11:33
    OpenCV显示中文汉字,未使用CvxText和FreeType库 采用windows的GDI显示系统的TrueType字体,没有封装,就两个函数,分成了h和cpp文件,可以自己编辑文件名和函数名,亦可以直接将cpp的代码复制到你需要的程序。 ...

    OpenCV显示中文汉字,未使用CvxText和FreeType库

    采用windows的GDI显示系统的TrueType字体,没有封装,就两个函数,分成了h和cpp文件,可以自己编辑文件名和函数名,亦可以直接将cpp的代码复制到你需要的程序中。

     

    1. puttext.h文件

    #ifndef PUTTEXT_H_
    #define PUTTEXT_H_
    
    
    #include <windows.h>
    
    #include <string>
    
    #include <opencv2/opencv.hpp>
    
    
    
    using namespace cv;
    
    
    
    void GetStringSize(HDC hDC, const char* str, int* w, int* h);
    
    void putTextZH(Mat &dst, const char* str, Point org, Scalar color, int fontSize,
    
    const char *fn = "Arial", bool italic = false, bool underline = false);
    
    #endif

     

    2. puttext.cpp 文件

    
    #include "puttext.h"
    void GetStringSize(HDC hDC, const char* str, int* w, int* h)
    
    {
    
    	SIZE size;
    
    	GetTextExtentPoint32A(hDC, str, strlen(str), &size);
    
    	if (w != 0) *w = size.cx;
    
    	if (h != 0) *h = size.cy;
    
    }
    
    
    
    void putTextZH(Mat &dst, const char* str, Point org, Scalar color, int fontSize, const char* fn, bool italic, bool underline)
    
    {
    
    	CV_Assert(dst.data != 0 && (dst.channels() == 1 || dst.channels() == 3));
    
    
    
    	int x, y, r, b;
    
    	if (org.x > dst.cols || org.y > dst.rows) return;
    
    	x = org.x < 0 ? -org.x : 0;
    
    	y = org.y < 0 ? -org.y : 0;
    
    
    
    	LOGFONTA lf;
    
    	lf.lfHeight = -fontSize;
    
    	lf.lfWidth = 0;
    
    	lf.lfEscapement = 0;
    
    	lf.lfOrientation = 0;
    
    	lf.lfWeight = 5;
    
    	lf.lfItalic = italic;
    
    	lf.lfUnderline = underline; //下划线
    
    	lf.lfStrikeOut = 0;
    
    	lf.lfCharSet = DEFAULT_CHARSET;
    
    	lf.lfOutPrecision = 0;
    
    	lf.lfClipPrecision = 0;
    
    	lf.lfQuality = PROOF_QUALITY;
    
    	lf.lfPitchAndFamily = 0;
    
    	strcpy_s(lf.lfFaceName, fn);
    
    
    
    	HFONT hf = CreateFontIndirectA(&lf);
    
    	HDC hDC = CreateCompatibleDC(0);
    
    	HFONT hOldFont = (HFONT)SelectObject(hDC, hf);
    
    
    
    	int strBaseW = 0, strBaseH = 0;
    
    	int singleRow = 0;
    
    	char buf[1 << 12];
    
    	strcpy_s(buf, str);
    
    	char *bufT[1 << 12];// 这个用于分隔字符串后剩余的字符,可能会超出。
    
    						  //处理多行
    
    	{
    
    		int nnh = 0;
    
    		int cw, ch;
    
    
    
    		const char* ln = strtok_s(buf, "\n", bufT);
    
    		while (ln != 0)
    
    		{
    
    			GetStringSize(hDC, ln, &cw, &ch);
    
    			strBaseW = max(strBaseW, cw);
    
    			strBaseH = max(strBaseH, ch);
    
    
    
    			ln = strtok_s(0, "\n", bufT);
    
    			nnh++;
    
    		}
    
    		singleRow = strBaseH;
    
    		strBaseH *= nnh;
    
    	}
    
    
    
    	if (org.x + strBaseW < 0 || org.y + strBaseH < 0)
    
    	{
    
    		SelectObject(hDC, hOldFont);
    
    		DeleteObject(hf);
    
    		DeleteObject(hDC);
    
    		return;
    
    	}
    
    
    
    	r = org.x + strBaseW > dst.cols ? dst.cols - org.x - 1 : strBaseW - 1;
    
    	b = org.y + strBaseH > dst.rows ? dst.rows - org.y - 1 : strBaseH - 1;
    
    	org.x = org.x < 0 ? 0 : org.x;
    
    	org.y = org.y < 0 ? 0 : org.y;
    
    
    
    	BITMAPINFO bmp = { 0 };
    
    	BITMAPINFOHEADER& bih = bmp.bmiHeader;
    
    	int strDrawLineStep = strBaseW * 3 % 4 == 0 ? strBaseW * 3 : (strBaseW * 3 + 4 - ((strBaseW * 3) % 4));
    
    
    
    	bih.biSize = sizeof(BITMAPINFOHEADER);
    
    	bih.biWidth = strBaseW;
    
    	bih.biHeight = strBaseH;
    
    	bih.biPlanes = 1;
    
    	bih.biBitCount = 24;
    
    	bih.biCompression = BI_RGB;
    
    	bih.biSizeImage = strBaseH * strDrawLineStep;
    
    	bih.biClrUsed = 0;
    
    	bih.biClrImportant = 0;
    
    
    
    	void* pDibData = 0;
    
    	HBITMAP hBmp = CreateDIBSection(hDC, &bmp, DIB_RGB_COLORS, &pDibData, 0, 0);
    
    
    
    	CV_Assert(pDibData != 0);
    
    	HBITMAP hOldBmp = (HBITMAP)SelectObject(hDC, hBmp);
    
    
    
    	//color.val[2], color.val[1], color.val[0]
    
    	SetTextColor(hDC, RGB(255, 255, 255));
    
    	SetBkColor(hDC, 0);
    
    	//SetStretchBltMode(hDC, COLORONCOLOR);
    
    
    
    	strcpy_s(buf, str);
    
    	const char* ln = strtok_s(buf, "\n", bufT);
    
    	int outTextY = 0;
    
    	while (ln != 0)
    
    	{
    
    		TextOutA(hDC, 0, outTextY, ln, strlen(ln));
    
    		outTextY += singleRow;
    
    		ln = strtok_s(0, "\n", bufT);
    
    	}
    
    	uchar* dstData = (uchar*)dst.data;
    
    	int dstStep = dst.step / sizeof(dstData[0]);
    
    	unsigned char* pImg = (unsigned char*)dst.data + org.x * dst.channels() + org.y * dstStep;
    
    	unsigned char* pStr = (unsigned char*)pDibData + x * 3;
    
    	for (int tty = y; tty <= b; ++tty)
    
    	{
    
    		unsigned char* subImg = pImg + (tty - y) * dstStep;
    
    		unsigned char* subStr = pStr + (strBaseH - tty - 1) * strDrawLineStep;
    
    		for (int ttx = x; ttx <= r; ++ttx)
    
    		{
    
    			for (int n = 0; n < dst.channels(); ++n) {
    
    				double vtxt = subStr[n] / 255.0;
    
    				int cvv = vtxt * color.val[n] + (1 - vtxt) * subImg[n];
    
    				subImg[n] = cvv > 255 ? 255 : (cvv < 0 ? 0 : cvv);
    
    			}
    
    
    
    			subStr += 3;
    
    			subImg += dst.channels();
    
    		}
    
    	}
    
    
    
    	SelectObject(hDC, hOldBmp);
    
    	SelectObject(hDC, hOldFont);
    
    	DeleteObject(hf);
    
    	DeleteObject(hBmp);
    
    	DeleteDC(hDC);
    
    }
    

     

    3.调用实例:

    #include "opencv2/opencv.hpp"
    
    
    
    #include "putText.h"
    
    
    
    using namespace std;
    
    using namespace cv;
    
    
    
    int main()
    
    {
    
        Mat img = imread("1000.jpg");
    
    
    
        putTextZH(img, "Arial字体换...\n行显示!", Point(50, 50), Scalar(0, 0, 255), 30, "Arial");
    
        putTextZH(img, "微软雅黑字体换...\n行,斜体,下划线,显示!", Point(50, 100), Scalar(0, 255, 0), 30, "微软雅黑", true, true);
    
        putTextZH(img, "楷体字体换...\n行,斜体,下划线,显示!", Point(50, 200), Scalar(128, 255, 0), 30, "楷体", true, true);
    
        putTextZH(img, "梁朝伟", Point(500, 500), Scalar(0, 0, 255), 30, "楷体", false, false);
    
    
    
        imshow("test", img);
    
    
    
        waitKey();
    
    
    
        return 0;
    
    }

     

    4.显示结果 

     

    https://blog.csdn.net/caomin1hao/article/details/83057626

    https://blog.csdn.net/caomin1hao/article/details/83057626

    展开全文
  • OpenCV字体调用中心

    2021-01-23 18:01:44
    一个大佬做的,现在找不到了 好像是TA: ...可以在OpenCV中调用中文字体,不骗人
  • opencv原带的添加字体只支持英文,本文件利用了freetype开源库来解决添加中文字体,freetype库已使用vs2010编译得到freetype235.lib,附带详细工程配置和使用方~~~~
  • opencv 里面各个字体的效果

    千次阅读 2019-10-04 20:40:35
    opencv 里面各个字体的效果 cv2.FONT_HERSHEY_SIMPLEX cv2.FONT_HERSHEY_PLAIN cv2.FONT_HERSHEY_DUPLEX FONT_HERSHEY_COMPLEX cv2.FONT_HERSHEY_TRIPLEX cv2.FONT_HERSHEY_COMPLEX_SMALL cv2.FONT_HERSHEY_...

    opencv 里面各个字体的效果

    cv2.FONT_HERSHEY_SIMPLEX
    在这里插入图片描述
    cv2.FONT_HERSHEY_PLAIN
    在这里插入图片描述
    cv2.FONT_HERSHEY_DUPLEX
    在这里插入图片描述
    FONT_HERSHEY_COMPLEX
    在这里插入图片描述
    cv2.FONT_HERSHEY_TRIPLEX
    在这里插入图片描述

    cv2.FONT_HERSHEY_COMPLEX_SMALL

    在这里插入图片描述

    cv2.FONT_HERSHEY_SCRIPT_SIMPLEX

    在这里插入图片描述
    cv2.FONT_HERSHEY_SCRIPT_COMPLEX
    在这里插入图片描述

    个人感觉,还是cv2.FONT_HERSHEY_TRIPLEX比较好看一点

    展开全文
  • 封装在Opencv的Mat图像绘制中文文字功能!解决Opencv中默认绘制中文字体出现乱码的情况!
  • OpenCV绘图之字体和文字

    万次阅读 2013-10-08 22:40:53
    OpenCV中输出文本是比较方便吧,有一个问题就是获取字体有那么一点麻烦,需要调用函数来实现其赋值,作为字体参数,而输出文本只需要设置字体,文本输出位置,文本的颜色,文本字符串,显示文本的图像这几个参数. ...

        在OpenCV中输出文本是比较方便吧,有一个问题就是获取字体有那么一点麻烦,需要调用函数来实现其赋值,作为字体参数,而输出文本只需要设置字体,文本输出位置,文本的颜色,文本字符串,显示文本的图像这几个参数.

    下面说一下输出文本的函数:

    void cvPutText{
            CvArr *           img,
            const char*       text,
            CvPoint           origin,
            const CvFont *    font,
            CvScalar          color
    };

    const CvFont * font 参数是通过cvInitFont()函数来实现的.

    下面是cvInitFont函数的原型声明:

    CvFont * cvInitFont(
                  CvFont *    font, 
                  int         font_face, 
                  double      hscale, 
                  double      vscale, 
                  int         thickness = 1, 
                  int         line_type = 8
    );
    

    关于font_face参数:

    CV_FONT_HERSHEY_SIMPLEX -               正常大小无衬线字体. 
    CV_FONT_HERSHEY_PLAIN -                 小号无衬线字体.
    CV_FONT_HERSHEY_DUPLEX -                正常大小无衬线字体比 CV_FONT_HERSHEY_SIMPLEX 更复杂) 
    CV_FONT_HERSHEY_COMPLEX -               正常大小有衬线字体.
    CV_FONT_HERSHEY_TRIPLEX -               正常大小有衬线字体 (  比 CV_FONT_HERSHEY_COMPLEX更复杂) 
    CV_FONT_HERSHEY_COMPLEX_SMALL -          CV_FONT_HERSHEY_COMPLEX 的小译本.
    CV_FONT_HERSHEY_SCRIPT_SIMPLEX -         手写风格字体.
    CV_FONT_HERSHEY_SCRIPT_COMPLEX -         比 CV_FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂.
    参数能够由一个值和可选择的 CV_FONT_ITALIC  字体标记合成。就是斜体字.

    参数vscale,和hscale分别表示行高、和字体宽度,当其值被设为1.0时,就为默认值,当其值被设为0.5时,就为原默认值的一半,shear参数表示字体的倾斜程度,当其值为0时,表示字体不倾斜,当其值为1时,文字倾斜45度.

    下面是使用函数的一个实例:

    /* OpenCV之显示文本函数的应用实例 */
    #include <highgui.h>
    #include <cv.h>
    
    
    int main()
    {
      /* 创建一个空图 */
     CvSize size = cvSize(400, 400);
     IplImage * testImage = cvCreateImage(size, IPL_DEPTH_8U, 3);
     /* 对图像数据域的矩阵进行赋值得到一副空白图 */
     for(int y = 0; y < testImage->height; y++){
      unsigned char * Pout = (unsigned char *)(testImage->imageData + y * testImage->widthStep);
      for(int x = 0; x < testImage->width; x++){
       Pout[3 * x + 0] = 255;
       Pout[3 * x + 1] = 255;/* 使图像呈现白色 */
       Pout[3 * x + 2] = 255;
      }
     }
     /* 定义要显示的内容 */
     char * text = new char[20];
     text = "Hello, world";/* 文本字符串1*/
     char * text_last = new char[60];
     text_last = "Copyright @3blog.csdn.net/yinkailin. All Rights Reserved.";/* 文本字符串2 */
     /* 定义要显示文字的位置、颜色和字体 */
     CvPoint point1 = cvPoint(50, 50);
     CvPoint point2 = cvPoint(80, 80);/* 设置字体在图片中出现的位置 */
     CvPoint point3 = cvPoint(110, 110);
     CvPoint point4 = cvPoint(10, 370);
     CvScalar color = cvScalar(10, 10, 210);/* 设置字体的颜色 */
     CvFont font1, font2, font3, font4;/* 定义一些设置字体的变量 */
    
     /* 使用cvInitFont函数为上述结构体赋值 */
     cvInitFont(&font1, CV_FONT_HERSHEY_SCRIPT_SIMPLEX, 0.5, 1.0, 0);
     cvInitFont(&font2, CV_FONT_HERSHEY_COMPLEX, 0.5, 1.0, 0);
     cvInitFont(&font3, CV_FONT_HERSHEY_SIMPLEX, 0.5, 1.0, 0);
     cvInitFont(&font4, CV_FONT_HERSHEY_SCRIPT_COMPLEX, 0.5, 1.0, 0);
     
    
     cvPutText(testImage, text, point1, &font1, color);
     cvPutText(testImage, text, point2, &font2, color);
     cvPutText(testImage, text, point3, &font3, color);/* 将相应格式的字体显示在图片相应的位置 */
     cvPutText(testImage, text_last, point4, &font4, color);
     cvNamedWindow("PutText");
     cvShowImage("PutText", testImage);/* 创建图片并显示文本 */
     cvWaitKey(0);
     /* 释放相关资源 */
     cvReleaseImage(&testImage);
     cvDestroyAllWindows();
     return 0;
    }
    

    程序的运行结果如下:

    奋斗。。。。。。。。。。。。。。。。。。。。。。。。。

     


     

     

     


    展开全文
  • 在图像绘制指定文字 cv::getTextSize() 获取一个文字的宽度和高度 1 cv::putText()函数 /** @brief Draws a text string. The function putText renders the specified text st...

     

     

     

    文字绘制函数
    函数名称描述
    cv::putText()在图像中绘制指定文字
    cv::getTextSize()获取一个文字的宽度和高度

    1  cv::putText()函数

    /** @brief Draws a text string.
    
    The function putText renders the specified text string in the image. Symbols that cannot be rendered
    using the specified font are replaced by question marks. See getTextSize for a text rendering code
    example.
    
    @param img Image.
    @param text Text string to be drawn.
    @param org Bottom-left corner of the text string in the image.
    @param fontFace Font type, see cv::HersheyFonts.
    @param fontScale Font scale factor that is multiplied by the font-specific base size.
    @param color Text color.
    @param thickness Thickness of the lines used to draw a text.
    @param lineType Line type. See the line for details.
    @param bottomLeftOrigin When true, the image data origin is at the bottom-left corner. Otherwise,
    it is at the top-left corner.
     */
    CV_EXPORTS_W 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 
                            );
    

     

     这个函数是OpenCV的一个主要文字绘制方法,它可以简单地在图像上绘制一些文字,由text指定地文字将在以左上角为原点地文字框中以color指定地颜色绘制出来,除非bottomLeftOrigin标志设置为真,这种情况以左下角为原点,使用的字体由fontFace参数决定

    可以使用的字体
    标识符描述
     FONT_HERSHEY_SIMPLEX                   = 0!< normal size sans-serif font  普通大小无衬线字体
    FONT_HERSHEY_PLAIN                         = 1!< small size sans-serif font     小号无衬线字体
    FONT_HERSHEY_DUPLEX                     = 2!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)      普通大小无衬线字体
    FONT_HERSHEY_COMPLEX                 = 3!< normal size serif font   普通大小无衬线字体比 FONT_HERSHEY_DUPLEX 更复杂
    FONT_HERSHEY_TRIPLEX                    = 4 

    !< normal size serif font (more complex than FONT_HERSHEY_COMPLEX  

    普通大小无衬字体,比 FONT_HERSHEY_COMPLEX 更复杂

      FONT_HERSHEY_COMPLEX_SMALL = 5

    !< smaller version of FONT_HERSHEY_COMPLEX

    小号版本的  FONT_HERSHEY_COMPLEX

    FONT_HERSHEY_SCRIPT_SIMPLEX   = 6!< hand-writing style font     手写字体
    FONT_HERSHEY_SCRIPT_COMPLEX = 7

    !< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX

    比 FONT_HERSHEY_SCRIPT_SIMPLEX  更复杂的变体

    FONT_ITALIC                                          = 16!< flag for italic font  

     

    表中列出来的任何一个字体都可以和CV::FONT_ITALIC 组合使用(通过或操作)来得到斜体。每种字体都有一个“自然”大小,当fontScale不是1.0时,在文字绘制之前字体大小将由这个数缩放。

    #include<iostream>
    #include<opencv2\core.hpp>
    #include<opencv2\highgui.hpp>
    #include<opencv2\imgproc.hpp>
    const char *path1 = "D:/Coder/vs/1_OpenCV/3096.jpg";
    
    int main()
    {
    	cv::Mat img = cv::imread(path1,cv::IMREAD_UNCHANGED);
    	const std::string str1 = "Hello World!";
    	cv::putText(img, str1, cv::Point2i(0, 0), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 30), cv::FONT_HERSHEY_PLAIN, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 60), cv::FONT_HERSHEY_DUPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 90), cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 120), cv::FONT_HERSHEY_TRIPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 150), cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 180), cv::FONT_HERSHEY_SCRIPT_SIMPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 210), cv::FONT_HERSHEY_SCRIPT_COMPLEX, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    	cv::putText(img, str1, cv::Point2i(0, 250), cv::FONT_ITALIC|cv::FONT_HERSHEY_PLAIN, 1, cv::Scalar(0, 255, 230), 1, 8, false);
    
    	cv::imshow("1", img);
    	cv::waitKey(0);
    	return 0;
    }

     

    衬线指的是字母结构笔画之外的装饰性笔画。有衬线的字体叫衬线体(serif);没有衬线的字体,则叫做无衬线体(sans-serif)。

    衬线字体(serif)

    特征:在字的笔画开始、结束的地方有额外的装饰,而且笔画的粗细会有所不同

    用途:serif字体容易识别,它强调了每个字母笔画的开始和结束,因此易读性比较高。在整文阅读的情况下,适合使用serif字体进行排版,易于换行阅读的识别性,避免发生行间的阅读错误。

    中文字体中的宋体就是一种最标准的serif字体,衬线的特征非常明显。字形结构也和手写的楷书一致。因此宋体一直被做为最适合的正文字体之一。

     

    无衬线字体(sans-serif)

    特征:sans serif是无衬线字体,没有这些额外的装饰,而且笔画的粗细差不多。该类字体通常是机械的和统一线条的,它们往往拥有相同的曲率,笔直的线条,锐利的转角。

    用途:无衬线字体醒目,适合用于标题、DM、海报等,需要醒目但不需要长时间阅读的地方。但现在市场上很多app正文都开始采用无衬线字体,因为无衬线字体更简约、清新,比较有艺术感。

    无衬线字体与汉字字体中的黑体相对应。为了起到醒目的作用,笔画比较粗,不适合长时间阅读,不适合用作正文字体。但是现代的 Macintosh、iOS、Android、Windows Vista 以上 等系统默认使用的无衬线字体基本上都是基于细黑体演化而来,不再像传统的无衬线字体那么重,因此用作正文字体时易读性也很高。

    在传统的正文印刷中,普遍认为衬线体能带来更佳的可读性。尤其是在大段落的文章中,衬线增加了阅读时对字母的视觉参照。而无衬线体往往被用在标题、较短的文字段落或者一些通俗读物中。相比严肃正经的衬线体,无衬线体给人一种休闲轻松的感觉。随着现代生活和流行趋势的变化,如今的人们越来越喜欢用无衬线体,因为他们看上去“更干净”。

     2  cv::getTextSize() 函数

    /** @brief Calculates the width and height of a text string.
    
    The function getTextSize calculates and returns the size of a box that contains the specified text.
    That is, the following code renders some text, the tight box surrounding it, and the baseline: :
    @code
        String text = "Funny text inside the box";
        int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;
        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;
    
        // center the text
        Point textOrg((img.cols - textSize.width)/2,
                      (img.rows + textSize.height)/2);
    
        // draw the box
        rectangle(img, textOrg + Point(0, baseline),
                  textOrg + Point(textSize.width, -textSize.height),
                  Scalar(0,0,255));
        // ... and the baseline first
        line(img, textOrg + Point(0, thickness),
             textOrg + Point(textSize.width, thickness),
             Scalar(0, 0, 255));
    
        // then put the text itself
        putText(img, text, textOrg, fontFace, fontScale,
                Scalar::all(255), thickness, 8);
    @endcode
    
    @param text Input text string.
    @param fontFace Font to use, see cv::HersheyFonts.
    @param fontScale Font scale factor that is multiplied by the font-specific base size.
    @param thickness Thickness of lines used to render the text. See putText for details.
    @param[out] baseLine y-coordinate of the baseline relative to the bottom-most text
    point.
    @return The size of a box that contains the specified text.
    
    @see cv::putText
     */
    CV_EXPORTS_W Size getTextSize(const String& text, int fontFace,
                                double fontScale, int thickness,
                                CV_OUT int* baseLine);

    参数意义

    . const string& text: 输入的文本文字 
    . int fontFace: 文字字体类型 
    . double fontScale: 字体缩放系数 
    . int thickness: 字体笔画线宽 
    . CV_OUT int* baseLine: 文字最底部y坐标

    cv::getTextSize()函数回答了如果把文字绘制出来将有多大的问题,而不用实际将文字绘制到图上,cv::getTextSize()唯一的新的参数就是baseLine,这实际上是一个输出参数,baseLine是和文字最低点相关的文字基线的y坐标值。

    #include <iostream>
    #include <opencv2/core.hpp>
    #include <opencv2/highgui.hpp>
    #include<opencv2\imgproc.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	string text = "Funny text inside the box";
    	//int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;     //手写风格字体
    	int fontFace = FONT_HERSHEY_SCRIPT_COMPLEX;
    	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;
    	//center the text
    	Point textOrg((img.cols - textSize.width) / 2, (img.rows - textSize.height) / 2);
    	//draw the box
    	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("text", img);
    	waitKey(0);
    	return 0;
    }

     

    展开全文
  • OpenCV显示中文汉字

    千次阅读 2019-12-23 17:14:28
    OpenCV显示中文汉字,未使用CvxText和FreeType库 采用windows的GDI显示系统的TrueType字体,没有封装,就两个函数,分成了h和cpp文件,可以自己编辑文件名和函数名,亦可以直接将cpp的代码复制到你需要的程序。 ...
  • 某机器视觉项目,往往会在一些图片上显示一些算法结果或者一些其他的文字信息来增强算法可视化或者提示演示效果。说白了,就是需要在图片上的某位置显示文字。 OSD简介 这里的OSD是on screen display的简写,翻译...
  • OpenCV添加文字的方法putText(…),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。 下文提供封装好的(代码)方法,供OpenCV添加中文使用。 效果预览 实现思路 使用PIL的...
  • opencv中提供了函数 cv::putText() 和 函数 cv::getTextSize() 来实现对文字的绘制。 函数 cv::putText():在图像绘制制定文字 函数 cv::getTextSize():获取一个文字的宽度和高度等尺寸 1、cv::putText()函数 ...
  • Freetype library not found问题详解,python(编程语言)+freetype(字体引擎)opencv 中文显示 在opencv的图片显示中文汉字
  • OpenCV 中文汉字显示

    2014-05-13 17:05:00
     * \brief OpenCV中输出汉字  **OpenCV中输出汉字。字库提取采用了开源的FreeFype库。由于FreeFype是  *GPL版权发布的库,和OpenCV版权并不一致,因此目前还没有合并到OpenCV  * 扩展库。  ** 显示汉字的...
  • 效果展示 开发环境配置python+freetype配置项目完整文档下载(源代码+字体+图片)完整字体下载包括:times new roman,中山行书百年纪念版,calibri,Christopherhand,DejaVuSansMono,方正兰亭黑,James Fajardo,...
  • OpenCV中文乱码问题

    千次阅读 2019-02-10 09:13:54
    原文出处: https://blog.xugaoxiang.com/ai/opencv-chinese.html 软硬件环境 ubuntu 18.04 64bit ...opencv中的cv2.putText方法可以将字符显示出来,不过遗憾的是,显示中文时会出现乱码。putText方法只支持a...
  • opencv

    2018-08-19 12:47:00
    opencv #-*- coding:utf8-*-#读取图片'''1.cv2.imread(文件名,属性) 属性:指定图像用哪一种方式读取文件 cv2.IMREAD_COLOR:读入彩色图像,默认参数,Opencv 读取彩色图像为BGR模式 !!!注意 cv...
  • C++ OpenCV输出中文

    2020-11-02 09:00:00
    学更好的别人,做更好的自己。——《微卡智享》本文长度为2796字,预计阅读7分钟前言以前的文章《C++ OpenCV视频操作之图像输出文字》介绍了OpenCV中的putText函数可以输...
  • OpenCV添加中文(五)

    千次阅读 2018-05-06 16:56:06
    OpenCV添加文字的方法putText(…),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。 下文提供封装好的(代码)方法,供OpenCV添加中文使用。 往期目录 # 《OpenCV环境...
  • C++实现KNN手写字体识别 2代码 头文件:Knn.h #include<opencv2\ml\ml.hpp> #include<highgui\highgui.hpp> #include<iostream> #ifndef _DIANBIAONUM_ #define _DIANBIAONUM_ #endif ...
  • opencv 显示中文

    2020-07-08 14:11:57
    中文显示 opencv + C++ 文件putText.h #ifndef PUTTEXT_H_ #define PUTTEXT_H_ #include <windows.h> #include <string> #include <opencv2/opencv.hpp> using namespace cv; void ...
  • python+freetype+opencv 中文汉字)显示 项目完整源代码 在图片上显示中文汉字),分享大家,别忘了好评
  • opencv显示中文

    2020-10-25 17:20:55
    注意:opencv必须编译下的contrib的freetype模块 # -*- coding:utf-8 -*- import cv2 import numpy as np img = np.zeros((100, 300, 3), dtype=np.uint8) ft = cv2.freetype.createFreeType2() # sudo apt-...
  • python opencv输出中文

    千次阅读 2018-04-12 15:38:15
    opencv在视频通过putText函数能添加文字,但对于中文则无能为力。一般需要FreeType字体库进行处理,在python可以通过PIL转换一下。 现将在视频添加中文封装成函数如下: def paint_chinese_opencv(im,...
  • 1、用opencv显示汉字 参考链接https://blog.csdn.net/yiqiudream/article/details/76216433/ 调用cvText类里的ToWar函数将汉字变换格式,特别是在调整字体大小的时候需要在class添加方法setMysize() void ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,204
精华内容 1,281
关键字:

opencv中文字体