OpenCV7---绘制形状文字

2023-10-08 00:50
文章标签 文字 绘制 形状 opencv7

本文主要是介绍OpenCV7---绘制形状文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

七、绘制形状和文字
1、在图片中绘制一条线
Point表示2D平面上的一个点,可用以下两个方式定义

Point p;
p1.x = 10; p1.y = 8;//第一种
p = Point(10, 8);//第二种

画线用到函数line( );

void MyLines() {//划线函数定义Point p1 = Point(20, 30);//定义线的起始点Point p2 = Point(300, 300);//定义线的终点//p2.x = 300;//p2.y = 300;Scalar color = Scalar(0, 0, 255);//定义线的颜色line(image, p1, p2, color, 1, LINE_8);//在图片src中生成一条线,从点p1到点p2,颜色为color, 线的宽度为1,类型为LINE_8//line(src, p1, p2, color, 1, LINE_AA);//类型为LINE_AA,反锯齿类型,生成的线更平滑
}

显示效果:
在这里插入图片描述
2、绘制长方形框

绘制长方形框用到函数rectangle( );

void MyRectangle() {//画长方形框函数定义Rect rect = Rect(20, 30, 300, 300);//定义长方形框的起点(20,30),长宽分别为300和300Scalar color = Scalar(255, 0, 0);//定义长方形框的颜色rectangle(src, rect, color, 2, LINE_8);在图片src中生成一个长方形框,参数为rect,颜色为color,线宽为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
3、绘制椭圆
绘制椭圆用函数ellipse( ),可以通过调节倾斜度数得到不同朝向的椭圆,可以通过调节显示范围得到弧形。

void MyEllipse() {//画椭圆函数定义Scalar color = Scalar(0, 255, 0);//定义椭圆颜色ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);//在图片src中生成一个椭圆框,中心点为Point,长短轴参数在Size中,倾斜角度为90°,显示范围为0-360°,颜色为color,线长为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
4、绘制圆形
绘制圆形用函数circle( );

void MyCircle() {//画圆函数定义Scalar color = Scalar(0, 255, 255);//定义圆的颜色Point center = Point(src.cols / 2, src.rows / 2);//定义圆的圆心circle(src, center, 150, color, 2, 8);//在图片src中生成一个圆,圆心坐标为Point,半径为150,颜色为color,线宽为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
5、绘制填充图形
填充图形用函数fillPoly( );

void MyPolygon() {//填充函数定义Point pts[2][5];//声明填充范围轮廓点的坐标,为一个2维数组,第一维代表有几个填充范围,第二维代表该范围的边界点,最终应传出指向某一个填充范围的指针pts[0][0] = Point(100, 100);    pts[0][1] = Point(100, 200);pts[0][2] = Point(200, 200);pts[0][3] = Point(200, 100);pts[0][4] = Point(100, 100);pts[1][0] = Point(300, 300);pts[1][1] = Point(300, 400);pts[1][2] = Point(400, 400);pts[1][3] = Point(400, 300);pts[1][4] = Point(300, 300);const Point* ppts[] = { pts[0], pts[1] };//指向第0个轮廓的指针int npt[] = { 5, 5 };//数组中存放每一个轮廓的轮廓点数Scalar color = Scalar(255, 12, 255);//定义轮廓颜色fillPoly(src, ppts, npt, 2, color, 8);//在图片src中填充一个范围,ppts中存放着这个轮廓信息的位置,npt代表该轮廓有几个轮廓点,2代表填充的轮廓数目
}

显示效果:
在这里插入图片描述
6、打印文字
打印文字用到函数putText( );

putText(src, "Hello OpenCV", Point(100, 200), FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 255, 200), 2, 8);//在屏幕上点Point处打印文字"Hello OpenCV",字体类型为FONT_HERSHEY_COMPLEX,放缩程度为1.0,后3个参数为颜色,线宽,类型

显示效果:
在这里插入图片描述
7、生成随机线
随机数生成cv::RNG

  • 随机数生成器RNG rng(12345);
  • 生成正态分布随机数uniform(int a, int b),随机生成啊[a, b)之间的数
void RandomLineDemo() {//生成随机线函数定义RNG rng(12345);//生成高斯随机函数Point pt1;Point pt2;Mat dst = Mat::zeros(src.size(), src.type());//构造新的一张与图片src大小类型一致的黑图dstfor (int i = 0; i < 100000; i++) {//执行100000次,不断生成随机线pt1.x = rng.uniform(0, src.cols);//第1个点x坐标生成正态分布随机数0到src.cols之间pt2.x = rng.uniform(0, src.cols);pt1.y = rng.uniform(0, src.rows);pt2.y = rng.uniform(0, src.rows);Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//随机生成颜色值if (waitKey(50) > 0) {//直到有按键按下才会结束break;}line(dst, pt1, pt2, color, 1, 8);//随机划线imshow("random line demo", dst);}
}

显示效果:
在这里插入图片描述
示例代码(绘制图片文字综合):

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void MyLines();//划线函数声明
void MyRectangle();//画长方形框函数声明
void MyEllipse();//画椭圆函数声明
void MyCircle();//画圆函数声明
void MyPolygon();//填充函数声明
void RandomLineDemo();
Mat src;//定义一个全局的图片int main(int argc, char** argv) {src = imread("C:/Users/26839/Pictures/测试.png");if (!src.data) {cout << "could not load image...\n" << endl;return -1;}imshow("yuantupian", src);MyLines();//调用划线函数MyRectangle();//调用长方形框函数MyEllipse();//调用画椭圆函数MyCircle();//调用画圆函数MyPolygon();//调用填充函数putText(src, "Hello OpenCV", Point(100, 200), FONT_HERSHEY_COMPLEX, 1.0,       Scalar(12, 255, 200), 2, 8);//在屏幕上点Point处打印文字"Hello OpenCV",字体类型为FONT_HERSHEY_COMPLEX,放缩程度为1.0,后3个参数为颜色,线宽,类型imshow("input", src);//RandomLineDemo();//声明生成随机线函数waitKey(0);destroyAllWindows();return 0;
}void MyLines() {Point p1 = Point(20, 30);Point p2 = Point(300, 300);Scalar color = Scalar(0, 0, 255);line(src, p1, p2, color, 1, LINE_8);
}void MyRectangle() {//画长方形框函数定义Rect rect = Rect(20, 30, 300, 300);//定义长方形框的起点(20,30),长宽分别为300和300Scalar color = Scalar(255, 0, 0);//定义长方形框的颜色rectangle(src, rect, color, 2, LINE_8);在图片src中生成一个长方形框,参数为rect,颜色为color,线宽为2,类型为LINE_8
}void MyEllipse() {//画椭圆函数定义Scalar color = Scalar(0, 255, 0);//定义椭圆颜色ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);//在图片src中生成一个椭圆框,中心点为Point,长短轴参数在Size中,倾斜角度为90°,显示范围为0-360°,颜色为color,线长为2,类型为LINE_8
}void MyCircle() {//画圆函数定义Scalar color = Scalar(0, 255, 255);//定义圆的颜色Point center = Point(src.cols / 2, src.rows / 2);//定义圆的圆心circle(src, center, 150, color, 2, 8);//在图片src中生成一个圆,圆心坐标为Point,半径为150,颜色为color,线宽为2,类型为LINE_8
}void MyPolygon() {//填充函数定义Point pts[2][5];//声明填充范围轮廓点的坐标,为一个2维数组,第一维代表有几个填充范围,第二维代表该范围的边界点,最终应传出指向某一个填充范围的指针pts[0][0] = Point(100, 100);pts[0][1] = Point(100, 200);pts[0][2] = Point(200, 200);pts[0][3] = Point(200, 100);pts[0][4] = Point(100, 100);pts[1][0] = Point(300, 300);pts[1][1] = Point(300, 400);pts[1][2] = Point(400, 400);pts[1][3] = Point(400, 300);pts[1][4] = Point(300, 300);const Point* ppts[] = { pts[0], pts[1] };//指向第0个轮廓的指针int npt[] = { 5, 5 };//数组中存放每一个轮廓的轮廓点数Scalar color = Scalar(255, 12, 255);//定义轮廓颜色fillPoly(src, ppts, npt, 2, color, 8);//在图片src中填充一个范围,ppts中存放着这个轮廓信息的位置,npt代表该轮廓有几个轮廓点,2代表填充的轮廓数目
}

输出结果如下:
在这里插入图片描述

这篇关于OpenCV7---绘制形状文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161574

相关文章

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画