OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字

2024-04-30 02:48

本文主要是介绍OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


/*
txwtech2021.3.28OpenCV08
绘制形状与文字
使用cv::Point与cv::Scalar
绘制线、矩形、圆、椭圆等基本几何形状
随机生成与绘制文本
Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Pont(10,8);
Scalar表示四个元素的向量
Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道

绘制线、矩形、园、椭圆等基本几何形状
画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly

填充矩形
可以通过多边形填充来填充矩形

随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)

绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts),
- fontFace, CV_FONT_HERSHEY_PLAIN
- fontScale , 1.0, 2.0~ 8.0


*/


/*
txwtech2021.3.28OpenCV08
绘制形状与文字
使用cv::Point与cv::Scalar
绘制线、矩形、园、椭圆等基本几何形状
随机生成与绘制文本
Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Pont(10,8);
Scalar表示四个元素的向量
Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道绘制线、矩形、园、椭圆等基本几何形状
画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly填充矩形
可以通过多边形填充来填充矩形随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts),
- fontFace, CV_FONT_HERSHEY_PLAIN
- fontScale , 1.0, 2.0~ 8.0*/
#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;Mat src_bgImg;
const char *draw_window = "shape and text show";
void DrawLine();
void DrawRectangle();
void DrawEllipse();//绘制椭圆
void DrawCircle();
void DrawPolygon();//多边形
void DrawRandomLine();//画随机线int main(int argc, char *argv[])
{src_bgImg = imread("E:\\pictures\\test1.jpg");if (!src_bgImg.data){printf("failed to load imgs");return -1;}DrawLine();DrawRectangle();DrawEllipse();DrawCircle();DrawPolygon();putText(src_bgImg,"hi OpenCV",Point(200,200),CV_FONT_HERSHEY_COMPLEX,1.0,Scalar(255,255,0),1,8);//绘制添加文字namedWindow(draw_window,CV_WINDOW_AUTOSIZE);imshow(draw_window,src_bgImg);DrawRandomLine();waitKey(0);return 0;
}
void DrawLine()
{Point p1 = Point(100, 50);//也可以这样写//p1.x = 30;//p1.y = 50;Point p2 = Point(100,500);Scalar color = Scalar(255,0,255);line(src_bgImg,p1,p2,color,2,LINE_8);//划一根竖线,2表示线的粗细}
//画矩形
void DrawRectangle()
{Rect rect = Rect(150,20,100,100);Scalar color = Scalar(255, 0, 255);rectangle(src_bgImg,rect,color,3,LINE_8);
}
void DrawEllipse()
{//(背景图像,椭圆的中心,椭圆的半径,角度,0,360,颜色,粗细,line的类型)//0:开始度数,360:结束的度数,也可以0-180,画成弧形,0-100度位置。等等Scalar color = Scalar(255, 0, 255);ellipse(src_bgImg,Point(src_bgImg.cols/2,src_bgImg.rows/2),Size(src_bgImg.cols/4,src_bgImg.rows/8),90,0,360,color,2,LINE_8);
}
void DrawCircle()
{Scalar color = Scalar(0, 255, 0);//定义圆形坐标Point center = Point(src_bgImg.cols/2,src_bgImg.rows/2);circle(src_bgImg,center,80,color,2,LINE_8);}
void DrawPolygon()
{Scalar color = Scalar(0, 255, 0);Point pts[1][5];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);const Point *ppts[] = {pts[0]};int npt[] = {5};fillPoly(src_bgImg,ppts,npt,1,color,8);//line_8也可以直接写成8
}
void DrawRandomLine()//画随机线
{RNG rng(12345);Point pt1;Point pt2;Mat bg_imgs = Mat::zeros(src_bgImg.size(),src_bgImg.type());namedWindow("randow_window",CV_WINDOW_AUTOSIZE);for (int i = 0; i < 20000; i++){pt1.x = rng.uniform(0, src_bgImg.cols);pt2.x = rng.uniform(0, src_bgImg.cols);pt1.y = rng.uniform(0, src_bgImg.cols);pt2.y = rng.uniform(0, src_bgImg.cols);Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));if (waitKey(50) > 0){break;}line(bg_imgs, pt1, pt2, color, 1, 8);imshow("randow_window", bg_imgs);}
}

 

这篇关于OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

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

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

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

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

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