精华内容
下载资源
问答
  • puttext
    2021-07-28 10:24:02

    putText()函数属于imgproc组件,其功能为在图像中某一位置显示文字,OpenCV中函数定义如下:


    C++: void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )
    Parameters:
    img – 显示文字所在图像.
    text – 待显示的文字.
    org – 文字在图像中的左下角 坐标.
    font – 字体结构体.
    fontFace – 字体类型, 可选择字体:FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合 FONT_HERSHEY_ITALIC使用,产生斜体效果。
    fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
    color – 文本颜色(默认颜色存储通道为BGR)
    thickness – 写字的线的粗细,类似于0.38的笔尖和0.5的笔尖
    lineType – 线性.
    bottomLeftOrigin – true, 图像数据原点在左下角. Otherwise, 图像数据原点在左上角.

    示例:

    Mat src=imread("./05.jpg",1);
    putText(src,"xiaoweiguo",Point(src.rows/2,src.cols/2),FONT_HERSHEY_SIMPLEX,2,Scalar(0,0,255),1,8,false);
    imshow("test",src);
    ————————————————
    版权声明:本文为CSDN博主「小伟锅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011028345/article/details/75449036

    更多相关内容
  • cv2.putText

    2021-01-06 23:41:23
    cv2.putText cv2.putText()的功能是在一个图片上写文字 cv2.putText(I,‘there 0 error(s):’,(50,150),cv2.FONT_HERSHEY_COMPLEX,6,(0,0,255),25)各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,...
  • cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3) 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细 其中字体可以选择 FONT_HERSHEY_SIMPLEX Python: cv.FONT_HERSHEY_...
  • 刚刚完成的一个gui,有点像tc界面。文本模式下的GUI设计时,主要要用到 这些库函数:textcolor() 用于设置打印文本的前景色,...gettext() 用于保存文本窗口的内容,puttext() 显示文本;利用这两个函 数,就可以实现
  • #pragma once #ifndef PUTTEXT_H_ #define PUTTEXT_H_ #include #include #include using namespace cv; class putText { private: static void GetStringSize(HDC hdc, const char* str, int* w, int* h); public: ...
    #pragma once
    #ifndef PUTTEXT_H_
    #define PUTTEXT_H_
    
    
    #include <Windows.h>
    #include <string>
    #include <opencv2/opencv.hpp>
    
    
    using namespace cv;
    
    
    class putText
    {
    private:
    	static void GetStringSize(HDC hdc, const char* str, int* w, int* h);
    
    
    public:
    	static void putTextZH(Mat& dst, const char* str, Point org, Scalar color, int fontsize,
    		const char* fn = "Arial", bool italic = false, bool underline = false);
    	static std::string UtfToGbk(std::string strValue);
    };
    
    
    #endif // !PUTTEXT_H_
    #include "putText.h"
    
    
    void putText::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 putText::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.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);
    }
    
    std::string putText::UtfToGbk(std::string strValue)
    {
    	int len = MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, NULL, 0);
    	wchar_t* wstr = new wchar_t[len + 1];
    	memset(wstr, 0, len + 1);
    	MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, wstr, len);
    	len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
    	char* str = new char[len + 1];
    	memset(str, 0, len + 1);
    	WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
    	if (wstr) delete[] wstr;
    	return std::string(str);
    }
    #include<iostream>
    #include"putText.h"
    #include<opencv2/opencv.hpp>
    #include<Windows.h>
    
    using namespace std;
    using namespace cv;
    
    
    
    int main(int argc, char* argv[])
    {
    	string imgName;
    	if (argc > 1)
    	{
    		imgName = argv[1];
    	}
    	else
    	{
    		cout << "please input img path: ";
    		cin >> imgName;
    		cout << endl;
    	}
    	string n = "图像处理";
    	string nn = putText::UtfToGbk(n);
    	Mat img;
    	img = imread(imgName);
    	putText::putTextZH(img, nn.c_str(), Point(img.cols / 2, img.rows / 2), Scalar(255, 10, 200), 100, "微软雅黑");
    
    	cv::namedWindow("img", WINDOW_NORMAL);
    	cv::imshow("img", img);
    	cv::waitKey();
    
    	return 0;
    }

    展开全文
  • OpenCV 文本显示 putText 和 getTextSize

    千次阅读 2022-01-15 13:57:50
    演示OpenCV中 putText()和getTextSize()这两个函数的用法。

    1. putText

    OpenCV官方文档 putText()

    	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. getTextSize

    OpenCV官方文档 getTextSize()

    	Size getTextSize(
    		const String& text,
    		int fontFace, //字体
    		double fontScale, //缩放比例
    		int thickness,
    		CV_OUT int* baseLine //下衬线到文字下边沿(文字原点位置)的距离
    		);
    
    • 返回类型是Size,返回文本的宽和高,但不包括下衬线到文本下边缘的距离。

    3. 示例

    在这里插入图片描述

    #include "stdafx.h"
    #include <opencv.hpp>
    using namespace cv;
    
    int main()
    {
    	Mat backGround(400, 400, CV_8UC3, Scalar(0, 0, 0));
    
    	putText(backGround, "Sunny Day", Point(0, 25), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255, 255, 255));
    	putText(backGround, "Sunny Day", Point(0, 75), FONT_HERSHEY_SIMPLEX, 2.0, Scalar(255, 0, 0));
    	putText(backGround, "Sunny Day", Point(0, 100), FONT_HERSHEY_PLAIN, 1.0, Scalar(0, 0, 255));
    	putText(backGround, "Sunny Day", Point(0, 125), FONT_HERSHEY_DUPLEX, 1.0, Scalar(255, 255, 0));
    	putText(backGround, "Sunny Day", Point(0, 150), FONT_HERSHEY_COMPLEX, 1.0, Scalar(255, 0, 255));
    	putText(backGround, "Sunny Day", Point(0, 175), FONT_HERSHEY_TRIPLEX, 1.0, Scalar(0, 255, 255));
    	putText(backGround, "Sunny Day", Point(0, 200), FONT_HERSHEY_COMPLEX_SMALL, 1.0, Scalar(0, 255, 0));
    	putText(backGround, "Sunny Day", Point(0, 225), FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, Scalar(0, 0, 255));
    	putText(backGround, "Sunny Day", Point(0, 250), FONT_HERSHEY_SCRIPT_COMPLEX, 1.0, Scalar(192, 192, 0));
    	putText(backGround, "Sunny Day", Point(0, 275), FONT_ITALIC, 1.0, Scalar(0, 255, 192));
    	putText(backGround, "Sunny Day", Point(0, 300), FONT_HERSHEY_COMPLEX, 1.0, Scalar(255, 192, 255));
    
    	int baseLine = 0;
    	Size sz = getTextSize("Sunny Day", FONT_HERSHEY_SIMPLEX, 2.0, 1, &baseLine);
    	line(backGround, Point(0, 75), Point(400, 75), Scalar(255, 255, 255));
    	line(backGround, Point(0, 75 + baseLine), Point(400, 75 + baseLine), Scalar(0, 255, 0));
    	line(backGround, Point(0, 75 - sz.height), Point(400, 75 - sz.height), Scalar(0, 0, 255));
    	
    	imshow("文本显示", backGround);
    	waitKey(0);
        return 0;
    }
    
    展开全文
  • putText

    千次阅读 2017-05-15 14:15:52
    opencv3.0学习之putText

    运行别人的程序时发现了一个浅墨书上没有介绍的函数,此函数在opencv3.0的improce库里最后有看到。
    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 );

    //! returns bounding box of the text string
    Size getTextSize(const String& text, int fontFace,
    double fontScale, int thickness,
    CV_OUT int* baseLine);

    参考这边文章:

    http://blog.csdn.net/ubunfans/article/details/24421981

    PutText
    C++: void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )
    Parameters:
    img – 显示文字所在图像.
    text – 待显示的文字.
    org – 文字在图像中的左下角 坐标.
    font – 字体结构体.
    fontFace – 字体类型, 可选择字体:FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合 FONT_HERSHEY_ITALIC使用,产生斜体效果。
    fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
    color – 文本颜色
    thickness – 写字的线的粗细,类似于0.38的笔尖和0.5的笔尖
    lineType – 线性.
    bottomLeftOrigin – true, 图像数据原点在左下角. Otherwise, 图像数据原点在左上角

    查阅opencv2 refman
    Size getTextSize(const string&text,int fontFace,double fontScale,int thickness,int *baseLine)
    parameters
    text-Input Text string
    fontFace-跟putText()使用方式一样
    fontScale-字体大小,跟putText使用方式一样
    thickness-字体粗细
    baseLine-基线
    输出坐标与文本最低点相关y-coordinate of the baseLine relative to the bottom-most text point

    展开全文
  • opencvShrap的PutText函数输出中文

    千次阅读 2022-04-24 09:54:14
    opencvShrap的PutText函数输出中文 PutText函数不支持中文的输出,所以需要将Mat类型转换成Image类型,然后调用Graphics的DrawString方法来写中文内容,然后再将这个Image类型转回Mat类型,并覆盖原来的Mat,思路...
  • OpenCV的函数putText()的原型如下: C++原型: Python原型: 参数意义如下: img—需要添加文本内容的图像。 text—具体要添加的文本内容,为字符串类型。 org—要添加文本内容的左上角坐标位置。 fontFace—字体...
  • Python OpenCV2 cv2.putText用法

    千次阅读 2022-04-14 11:16:11
    Python OpenCV2 cv2.putText用法 文章目录Python OpenCV2 cv2.putText用法一、cv2.putText的语法介绍二、使用样例 一、cv2.putText的语法介绍 首先是官方文档的介绍,如下: def putText(img, text, org, fontFace,...
  • cv::putText void putText( InputOutputArray img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType = LINE_8, bool botto
  • OpenCV putText() 是 OpenCV 库中的一个命令,用于在用户通过使用 put text 函数提供的图像中放置指定的文本。可以看到这个函数是在 python 编程语言的 img proc.hpp 头文件中定义的。要根据用户的要求将文本放入...
  • opencv puttext 文本框填充颜色

    千次阅读 2022-01-03 21:49:47
    (topleft[0] + retval[0], topleft[1] + retval[1]+5) cv.rectangle(image, (topleft[0], topleft[1] - baseLine), bottomright,thickness=-1, color=hei) # 绘制文本 cv.putText(image, text, (pt1[0], pt1[1]-...
  • 1.putText函数原型 void cv::putText( cv::Mat& img, // 待绘制的图像 const string& text, // 待绘制的文字 cv::Point origin, // 文本框的左下角 int fontFace, // 字体 (如cv::FONT_HERSHEY_...
  • opencv putText中文乱码

    千次阅读 2021-09-17 14:58:28
    https://mangoroom.cn/opencv/opencv-puttext-chinese-characters.html ...opencv不支持渲染中文字符的本质是不支持对utf-8的字符渲染,opencv库中的cv::putText()函数仅支持对ascii码,这是一个很小的字符编码,想要
  • OpenCV3 字体文字(putText()和 getTextSize())

    千次阅读 多人点赞 2019-07-21 16:08:54
    cv::putText() 在图像中绘制指定文字 cv::getTextSize() 获取一个文字的宽度和高度 1 cv::putText()函数 /** @brief Draws a text string. The function putText renders the specified text st...
  • openCV对识别出的目标对象标号(putText函数)

    千次阅读 多人点赞 2021-03-16 12:42:47
    就像下面这段代码,直接利用cv.putText函数即可,注意数字需要转化成字符型! # 提取轮廓 # findContours函数会修改原始图像 cnts = cv.findContours(cannyImg.copy(), mode=cv.RETR_EXTERNAL, method=cv.CHAIN_...
  • OpenCV puttext不调库显示中文

    千次阅读 2020-06-17 12:23:56
    opencv的puttext函数显示中文时会乱码,网上搜了很多方法都要调库啥的来解决,感觉有些麻烦,而且文字也有一些锯齿等,效果不是很好。 自己写了个头文件来解决这个问题,代码非常简洁,如下: putText.h: #ifndef ...
  • OpenCV puttext()函数字符类型

    千次阅读 2022-03-17 14:23:50
    FONT_HERSHEY_SIMPLEX = 0, //!< 常规大小 没有衬线的字体 FONT_HERSHEY_PLAIN = 1, //!< 小号 没有衬线的字体 FONT_HERSHEY_DUPLEX = 2, //!< 常规大小 复杂的没有衬线的字体 FONT_HERSHEY_COMPLEX = 3...
  • 简介:在cv2中,目前putText函数中文是无法直接使用的,需要进行一点的转换。解决办法为通过PIL模块重新封装一个函数,直接调用。 如图:??? 通过PIL模块改造:new_put_text.py # coding=utf-8 # cv2解决绘制中文...
  • OpenCV 文字绘制cv::putText详解

    千次阅读 2021-01-11 17:15:56
    ... opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数——在图像上绘制文字。这个函数即是cv::putText()。 具体形式如下: void cv::putText( cv::Mat& img, // 待绘制的图像 const str
  • OpenCV-文字绘制cv::putText

    万次阅读 多人点赞 2021-08-24 14:47:27
    函数原型: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 );
  • cv2.putText字体比较

    千次阅读 2021-02-08 13:47:09
    cv2.putText(original_image, text=info, org=(10, 25), fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1,color=(255, 0, 0), thickness=2) # putText各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小...
  • 在OpenCV里用putText输出文本

    千次阅读 2020-01-06 09:07:50
    这个函数即是putText(),不过这个函数不支持中文绘制显示,如果要中文显示必须自己实现图片的方式绘制,可以查看前面的文章,连接如下: https://blog.csdn.net/caimouse/article/details/102525550 在这里先来...
  • 如果为负数,表示要绘制一个填充的圆 lineType:圆形边界的类型 shift:位移中心坐标和半径值的小数位数 2、putText()函数模板:putText(cv::InputOutputArray img,const cv::String &text,cv::Point org,int ...
  • OpenCV文字绘制函数putText()的使用 OPenCV版本:4.4 IDE:VS2017 功能描述 简述:在一个图像里绘制文字。 函数 cv::putText在图像里渲染指定的字符串. 符号不能被渲染,用问号来代替。参见 getTextSize 是一个...
  • opencv putText() 参数使用图示参考
  • 函数说明void cv::putText(cv::Mat& img, // 待绘制的图像const string& text, // 待绘制的文字cv::Point origin, // 文本框的左下角int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)double fontScale, //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,049
精华内容 7,219
关键字:

puttext